if else shorthand 在 C 中
if else shorthand in C
下面的说法是不是shorthand的一种?我需要有人帮助我理解它。
#define clean_errno()(errno == 0? "None": strerror(errno))
从执行结果来看,我猜是说一旦我遇到clean_errno()
,如果errno ==0
,我把clearn_errno()
替换成None
,如果不是,我替换clean__errno()
和 strerror(errno)
。但我不知道如何从逻辑上分析这句话?
代码在运行时进行评估并遵循 shorthand:
condition ? if_true : if_false
此 shorthand 与常规 if else
语句非常相似。
然而,与 C 中的正常 if else
不同,shorthand 可以用作表达式和语句。即:
char * str = 1 ? "true" : "false";
... 与 if else
配合使用效果不佳(char * str = if ...
可能无效)。
用 0 ? "true" : "false"
试一试并测试一下。
祝你好运!
预处理器宏在它们的调用站点中被替换。
这意味着像
这样的语句
printf("Error = %s\n", clean_errno());
将被替换为
printf("Error = %s\n", (errno == 0? "None": strerror(errno)));
然后在 运行 时间打印 "None"
如果 errno == 0
,否则打印 strerror(errno)
.
的结果
至于?:
表达式本身,它是conditional (a.k.a. the ternary) expression,它的作用类似于if-else
。
但是,我不推荐使用这样的宏,因为如果函数没有失败,errno
的值通常是未定义的。在检查 errno
之前,您需要确保前一个函数确实 did 失败,在这种情况下它永远不会为零。很少有 errno
会被重置为零的地方,除非你事先特别这样做,并且 知道 你调用的函数不会修改它,除非出现错误。
下面的说法是不是shorthand的一种?我需要有人帮助我理解它。
#define clean_errno()(errno == 0? "None": strerror(errno))
从执行结果来看,我猜是说一旦我遇到clean_errno()
,如果errno ==0
,我把clearn_errno()
替换成None
,如果不是,我替换clean__errno()
和 strerror(errno)
。但我不知道如何从逻辑上分析这句话?
代码在运行时进行评估并遵循 shorthand:
condition ? if_true : if_false
此 shorthand 与常规 if else
语句非常相似。
然而,与 C 中的正常 if else
不同,shorthand 可以用作表达式和语句。即:
char * str = 1 ? "true" : "false";
... 与 if else
配合使用效果不佳(char * str = if ...
可能无效)。
用 0 ? "true" : "false"
试一试并测试一下。
祝你好运!
预处理器宏在它们的调用站点中被替换。
这意味着像
这样的语句printf("Error = %s\n", clean_errno());
将被替换为
printf("Error = %s\n", (errno == 0? "None": strerror(errno)));
然后在 运行 时间打印 "None"
如果 errno == 0
,否则打印 strerror(errno)
.
至于?:
表达式本身,它是conditional (a.k.a. the ternary) expression,它的作用类似于if-else
。
但是,我不推荐使用这样的宏,因为如果函数没有失败,errno
的值通常是未定义的。在检查 errno
之前,您需要确保前一个函数确实 did 失败,在这种情况下它永远不会为零。很少有 errno
会被重置为零的地方,除非你事先特别这样做,并且 知道 你调用的函数不会修改它,除非出现错误。