我不明白下面的代码是如何工作的:
#include "stdio.h"
int main(void) {
int i = 3;
while(i--) {
static int i = 100;
i--,
printf("%d\n", i);
}
return 0;
}
使用 Clang 或 GCC 编译的代码会打印以下输出:
99
98
97
有人可以向我解释这里发生了什么吗?看起来两个操作是在一条指令中完成的,而且不止一次。它是未定义的行为吗? 我在 C++ 中观察到相同的行为。
最佳答案
这不是未定义的行为。
#include "stdio.h"
int main(void) {
int i = 3; //first i
while(i--) {
static int i = 100; //second i
i--,
printf("%d\n", i);
}
return 0;
}
在 while 循环体中,大多数本地 i
(第二个 i
)是首选。在 while 循环中检查条件时,它不知道正文中有什么。所以选择第一个i
是没有问题的。
关于c++ - 在同一函数中定义变量及其静态等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48539659/