我是C开发的软件工程方面的新手; 有没有人有一个很好的指导如何为C项目(特别是嵌入式)设计错误跟踪或错误控制系统?谈论C库的错误跟踪也会有所帮助.
根据我的经验,这里的策略属于几个阵营.
使用全局变量ala errno.这是如何工作的本质上任何函数都可以在全局变量中存储错误代码,因此在执行该函数后,您可以读取错误代码以查看它是否正确执行.在多线程环境中工作时,存在一些明显的问题.虽然POSIX.1c 似乎指定了该问题的解决方案.
让每个函数都返回错误代码.例如:
RESULT_CODE my_function(int param1, int param2);
RESULT_CODE error_code = my_function(10, 2);
这种方法的问题在于您无法直接从函数返回值.
每个函数都有一个额外的参数来存储结果代码.例如:
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...
}
我已经看到这种方法在商业RTOS中成功使用,并且个人更喜欢它,因为我发现它是限制性最小的.唯一可能的缺点是,即使您不关心结果,也必须显式声明一个变量来存储错误代码.从某种意义上说,我实际上有点像那个要求,因为它迫使你不断思考如何处理错误.