C中“,”运算符的行为不清楚

彼德

在给定的代码中,我发现了以下顺序,

data = POC_P_Status, TE_OK;

我不明白那是什么意思。

数据元素是否接收第一个或第二个元素或其他内容?

更新:

我在某处读到这种行为是这样的,

如果我会写:

if(data = POC_P_Status,TE_OK){...}

如果TE_OK为true,则if子句为true。

你什么意思?

伊尔莫欧元

它等效于以下代码:

data = POC_P_Status;
TE_OK;

换句话说,它分配POC_P_Statusdata并求值为TE_OK在第一种情况下,表达式TE_OK独立的,因此仅当它是具有副作用的宏时才有意义。在第二种情况下,表达式实际上是if语句的一部分,因此它始终求值为的值TE_OK该语句可以改写为:

data = POC_P_Status;
if (TE_OK) { ... }

从C11草案(http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf):

逗号运算符的左操作数被评估为void表达式;评估后有一个序列点。然后评估正确的操作数;结果具有其类型和价值。如果尝试修改逗号运算符的结果或在下一个序列点之后访问它,则该行为未定义。

这意味着在表达式中:

a, b

a评估并扔掉,然后b进行评估。整个表达式的值等于b

(a, b) == b

逗号运算符通常用于需要多次分配但只允许一个表达式的地方,例如for循环:

for (int i=0, z=length; i < z; i++, z--) {
    // do things
}

其他上下文中的逗号(例如函数调用和声明)不是逗号运算符:

int func(int a, int b) {...}
              ^
              |
              Not a comma operator

int a, b;
     ^
     |
     Not a comma operator

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章