- 此问题在此处已有答案**:
What does the comma operator , do?(8个答案)
昨天关门了。
以下代码片段来自mac sdk signal.h
:
#define sigemptyset(set) (*(set) = 0, 0)
只是想知道, 0)
是做什么的?
What does the comma operator , do?(8个答案)
昨天关门了。
以下代码片段来自mac sdk signal.h
:
#define sigemptyset(set) (*(set) = 0, 0)
只是想知道, 0)
是做什么的?
2条答案
按热度按时间txu3uszq1#
宏扩展为逗号表达式:首先计算左操作数,将
set
指向的对象设置为0
,然后计算右操作数,其值为整个表达式的值,因此:0
.换句话说,宏的行为类似于始终成功的函数,成功由返回值
0
指示。除了类型检查外,宏等效于:
注意,
<signal.h>
头文件还包含此函数的原型:在你的代码中,
sigemptyset(&sigset)
调用宏,但是你可以通过写(sigemptyset)(&sigset)
或者通过获取函数的指针来强制引用库函数。宏允许内联扩展而不改变原型。clang可以在链接时对小函数执行内联扩展,但是不能对动态库中定义的函数执行内联扩展。头文件中的其他函数也使用相同的技巧,对于这些函数,
, 0)
对于表达式计算为int
类型的0
是必需的:blmhpbnm2#
在此表达式中
使用逗号运算符。
表达式的结果为0。
作为副作用,指针
set
所指向的对象被设置为0。来自C标准(6.5.17逗号运算符)
2逗号运算符的左操作数作为void表达式计算;在它的求值和右操作数的求值之间有一个序列点,则右操作数求值;结果具有其类型和值。