Ama*_*wal 1 c syntax evaluation for-loop
#include <stdio.h>
int main(void) {
char i=250;
for(i<0;i++;i=0,printf("%d", i));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这个程序中,输出是 0。据我所知,for 循环应该有第一个参数作为初始化,然后是条件,然后是增量。但是在这个问题中,初始化是最后发生的,并且代码仍然给出有效的结果。有人可以解释一下吗?
for语句中的子句或表达式始终根据它们在语句中的位置(第一、第二或第三)进行for解释。在这段代码中:
char i=250;
for(i<0;i++;i=0,printf("%d", i));
return 0;
Run Code Online (Sandbox Code Playgroud)
i设置为 250(如果char是无符号的)或 ?6(如果char是有符号的,八位,典型的二进制补码包装用于从 250 到char)。(C 标准允许其他可能性,但它们是不寻常的,在本答案中不会进一步讨论。)i<0被评估。它的结果是无关紧要的,因为它被忽略了。i++被评估。根据上述,这会产生 250 或 ?6,并且分别i增加到 251 或 ?5。在任何一种情况下,表达式的结果都是非零的,因此循环继续。;被评估。由于这是一个空语句,因此没有任何效果。i=0,printf("%d", i)进行评估。这设置i为 0 并打印i,导致输出“0”。i++再次评估测试子句。由于i为零,这将产生 0,并且单独递增i到 1。由于表达式的结果为零,循环终止。return 0; 执行,导致程序以成功状态结束。