有没有人对C的设计和错误跟踪/控制系统有很好的指导?

jpa*_*ker 4 c embedded

我是C开发的软件工程方面的新手; 有没有人有一个很好的指导如何为C项目(特别是嵌入式)设计错误跟踪或错误控制系统?谈论C库的错误跟踪也会有所帮助.

Gab*_*abe 5

根据我的经验,这里的策略属于几个阵营.

  • 使用全局变量ala errno.这是如何工作的本质上任何函数都可以在全局变量中存储错误代码,因此在执行该函数后,您可以读取错误代码以查看它是否正确执行.在多线程环境中工作时,存在一些明显的问题.虽然POSIX.1c 似乎指定了该问题的解决方案.

  • 让每个函数都返回错误代码.例如:

    RESULT_CODE my_function(int param1, int param2);
    
    RESULT_CODE error_code = my_function(10, 2);
    
    Run Code Online (Sandbox Code Playgroud)

这种方法的问题在于您无法直接从函数返回值.

  • 每个函数都有一个额外的参数来存储结果代码.例如:

    void my_function(int param1, int param2, RESULT_CODE *err);
    
    RESULT_CODE error_code;
    my_function(10, 2, &error_code);
    switch (error_code)
    {
        case RESULT_OK:
            // all OK
            break;
        case RESULT_NO_MEM:
            // out of memory
            break;
        // etc...
    }
    
    Run Code Online (Sandbox Code Playgroud)

我已经看到这种方法在商业RTOS中成功使用,并且个人更喜欢它,因为我发现它是限制性最小的.唯一可能的缺点是,即使您不关心结果,也必须显式声明一个变量来存储错误代码.从某种意义上说,我实际上有点像那个要求,因为它迫使你不断思考如何处理错误.