43人参与 • 2026-02-13 • C/C++
这两个都是 c 语言中用于提升程序健壮性的自定义宏,分别解决「命令行参数合法性检查」和「函数返回值错误检查」问题,是 linux/c 编程中常见的错误处理范式。
| 宏名 | 核心功能 | 适用场景 |
|---|---|---|
args_check | 检查命令行参数个数是否符合预期 | 程序启动时验证参数数量 |
error_check | 检查函数返回值是否为错误标记,打印系统错误 | 调用系统 / 库函数后验证执行结果 |
#define args_check(argc, expected) \
do { \
if ((argc) != (expected)) { \
fprintf(stderr, "args num error!\n"); \
exit(1); \
} \
} while (0)
关键知识点:
argc:程序实际接收的命令行参数总数(c 语言中main(int argc, char *argv[])的第一个参数,程序名本身算 1 个参数);expected:程序期望的参数个数(比如仅执行程序./a.out时,期望argc=1)。fprintf(stderr)输出错误提示(stderr保证错误信息直接显示在控制台,不被重定向覆盖),并调用exit(1)终止程序(1表示异常退出,区别于正常退出的exit(0))。do { ... } while (0)包裹逻辑:保证宏在任何场景下(比如单独使用、跟在if后)语法正确,避免因宏展开导致的语句块错误(比如少加花括号引发的逻辑混乱)。典型使用示例
int main(int argc, char *argv[]) {
// 期望程序仅接收1个参数(仅程序名),否则报错
args_check(argc, 1);
// 后续业务逻辑...
return 0;
}
#define error_check(ret, error_flag, msg) \
do { \
if ((ret) == (error_flag)) { \
perror(msg); \
exit(1); \
} \
} while (0)
关键知识点:
ret:函数调用后的实际返回值(比如open/read/malloc的返回值);error_flag:函数的错误标记值(比如open失败返回-1,malloc失败返回null);msg:自定义错误提示文本(用于说明 “哪个操作出错”)。perror(msg)打印错误(perror会输出「自定义 msg + 系统级错误原因」,比如msg="open file"时,输出open file: no such file or directory),并exit(1)终止程序。perror 比 fprintf(stderr) 更强大 —— 不仅输出自定义提示,还会结合errno(系统错误码)输出具体的系统错误原因,适合排查函数执行失败的底层原因。到此这篇关于c语言错误处理宏两个比较重要的的文章就介绍到这了,更多相关c语言错误处理宏内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论