Com*_*non 0 c macros preprocessor
以下声明是一种简写吗?我需要有人帮助我理解它.
#define clean_errno()(errno == 0? "None": strerror(errno))
Run Code Online (Sandbox Code Playgroud)
从执行结果,我想这意味着一旦我面对clean_errno()
,如果errno ==0
我更换clearn_errno()
用None
,如果没有,我代替clean__errno()
用strerror(errno)
.但我不知道如何从逻辑上分析这个陈述?
预处理器宏在其调用站点中被替换.
这意味着像
printf("Error = %s\n", clean_errno());
Run Code Online (Sandbox Code Playgroud)
将被替换为
printf("Error = %s\n", (errno == 0? "None": strerror(errno)));
Run Code Online (Sandbox Code Playgroud)
然后在运行时打印"None"
if errno == 0
,否则打印结果strerror(errno)
.
至于?:
表达式本身,它是条件(也就是三元)表达式,它的作用类似于a if-else
.
但是,使用像这样的宏不是我推荐的,因为errno
如果函数没有失败,通常是未定义的值.您需要确保先前的函数在检查之前确实失败了errno
,在这种情况下它永远不会为零.errno
除非您事先专门执行此操作并且知道您调用的函数不会修改它,除非出现错误,否则很少有地方会重置为零.