当逗号分隔的for循环的条件部分中有多个表达式时会发生什么?

Sem*_*kül 2 c syntax loops comma-operator

我这里有一个无限循环,但为什么呢?

int end = 5;
for(int i = 0; i < end, printf("at condition i=%d\n",i); ++i) 
{
    printf("inside i=%d\n",i);
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*chs 6

逗号运算符的左操作数被计算为void表达式,逗号运算符的求值结果是右操作数的结果.因此,for循环的"if"部分会查看printf高于零的结果,这意味着它永远不会结束.

您可以通过交换来修复它:

int end = 5;
for(int i = 0; printf("at condition i=%d\n",i), i < end; ++i) 
{
    printf("inside i=%d\n",i);
}
Run Code Online (Sandbox Code Playgroud)

但更好的是不要这样做.它不是很易读.