[英]What is this syntax?
i = 1, 2, 3, 4, 5;
这实际上将1
分配给i
。
*****我想知道这种作业在某处是否真的有用吗?*****
您知道这种语法的一些应用吗?
当您想在for循环中说2个迭代变量时,此语法非常有用
for ( i = 0, j = 0; i < 10 && j < 10; i++ ) {
..
}
它是逗号运算符,C的最低优先级运算符。 根据C的优先级规则,该行解析为:
(i = 1), (2), (3), (4), (5);
如果您想在那条线上做其他事情,这可能是“有用的”:
i = 2, j = 3, k++;
可以使您不必在if()
语句中使用方括号(并且以后可能还会引起头痛),或者使您可以在for()
循环的控制流中使用多个表达式(实际上是对逗号运算符的合理使用)。
应用: 混淆C竞赛 !
逗号运算符的另一个常见用法是在while
循环条件下:
while (c = getchar(), c != EOF && c != '\n')
{
这不是一种“任务类型”。 逗号运算符的绑定非常宽松,比赋值更宽松。 因此,您编写了等效于:
((((i = 1), 2), 3), 4), 5;
void上下文中的整数文字是无用的(可能是为了避免在某些情况下(例如assert)在某些情况下不执行任何操作的宏中发出警告),因此不,这种语法没有用-需要将i设置为1并计算为5是非常有限的,即使您找到了理由,2,3,4也是多余的。
更有用的可能是i = 1, code_that_actually_does_something;
。 逗号运算符最常见的用法是在不允许您使用多个语句(例如“ if”和“ while”条件)或必须作为表达式求值的宏的上下文中潜入多种副作用。
这是逗号运算符 ,它允许您将多个表达式组合为一个。
编译器将其解析为(i = 1), 2, 3, 4, 5
,因为=
具有比逗号运算符更高的优先级。
除了在for
循环中,它通常没有用,并且它的使用被皱眉了。
在作业中,我想不出这个特定示例在什么地方有用。
您可以,但是
x = 1, y = 2, z = 3;
并且它们将被视为单个语句,并从左到右进行评估(根据C89)。
正如其他人已经指出的那样:该语句将1赋给i,然后求值2,然后是3,然后是4,然后是5。然后,该语句的总值为5(最后一个求值的表达式)。
当您要创建一个可以完成多项工作并返回诸如函数之类的值的宏时,这很有用:
#define STEAL_MAGIC_HAT(thing1, thing2, cat) \
(smack(thing1), punch(thing2),get_hat(cat))
extern thing_t g_thing1, g_thing2;
extern cat_t g_cat;
...
hat_t hat = STEAL_MAGIC_HAT(g_thing1, g_thing2, g_cat);
don(hat);
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.