加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C错误检查功能

发布时间:2020-12-16 10:28:09 所属栏目:百科 来源:网络整理
导读:对于我的系统编程类,我们在C中进行了大量编程,并且需要对大多数函数进行错误检查,因为我们正在学习使用pthread编程. 我之所以说这不是真正的功课,是因为它远远超出了本课程的预期.简单地单独检查每个功能是令人满意的.我只是觉得这是一个耗时且麻烦的方法,希
对于我的系统编程类,我们在C中进行了大量编程,并且需要对大多数函数进行错误检查,因为我们正在学习使用pthread编程.

我之所以说这不是真正的功课,是因为它远远超出了本课程的预期.简单地单独检查每个功能是令人满意的.我只是觉得这是一个耗时且麻烦的方法,希望有一个更简洁的解决方案.

我想知道是否有人可以告诉我如何编写一个函数,将任何C函数作为参数,然后是该函数的所有必需参数,以及所需的返回值(在这种情况下是正确的),并执行以下.

if(function_name(param1,param2,...) != desired_return_value) {
    fprintf(stderr,"program_name: function_name() failedn");
    perror("function_name(): ");
}

这可能吗?我们的课程几乎不需要它,但它让我感到烦恼的是,我写的几乎所有函数都必须有4行代码才能对其进行错误检查.它让人难以阅读.

甚至其他一些建议也会很好.我只是想提高可读性,所以如果这是完全错误的方向,那么一些正确的方向将非常受欢迎.

编辑:这应该理想地在gnu99标准下编译:P

编辑2:回应James McNellis:
我们的功能错误(我相信在这种情况下),需要处理.仅需要提供通知.我们没有涉及处理线程/进程相关错误(简而言之就是这个主题).

解决方法

在不使用宏的情况下用C编写通用代码并不是最简单的事情.

对于使用可变参数宏的(非常)基本解决方案:

#define CALL_AND_CHECK(f,r,...)                                
    do {                                                         
        if (f(__VA_ARGS__) != r)                                 
        {                                                        
            fprintf(stderr,"program_name: " #f "() failedn");  
            perror(#f "(): ");                                   
        }                                                        
    } while (0)

(有关使用“无意义”do / while循环的原因,请参阅Why are there sometimes meaningless do/while and if/else statements in C and C++ macros?)

请注意,打印出错误消息而不是实际处理错误几乎肯定是个坏主意.通常,需要以不同方式处理不同的错误,因此这样的通用代码可能不是特别有用.如果你不想尝试从任何这些错误中恢复,你可以退出(),这可能对于一项任务是可以的,不过在真实世界的程序中你不想这样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读