我一直认为在 C 中,所有变量都必须在函数的开头声明。我知道在 C99 中,规则与 C++ 中的规则相同,但是 C89/ANSI C 的变量声明放置规则是什么?
以下代码使用 gcc -std=c89
和 gcc -ansi
编译成功:
#include <stdio.h>
int main() {
int i;
for (i = 0; i < 10; i++) {
char c = (i % 95) + 32;
printf("%i: %c\n", i, c);
char *s;
s = "some string";
puts(s);
}
return 0;
}
在 C89/ANSI 模式下,c
和 s
的声明不应该导致错误吗?
最佳答案
它编译成功,因为 GCC 允许将 s
声明为 GNU 扩展,即使它不是 C89 或 ANSI 标准的一部分。如果您想严格遵守这些标准,则必须传递 -pedantic
标志。
{ }
block 开头的 c
声明是 C89 标准的一部分;该 block 不一定是函数。
关于c - C 中的变量声明位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/288441/