【发布时间】:2012-10-28 17:05:50
【问题描述】:
C11 标准(注意我不是指 C++11)是否允许您在函数中的任何位置声明变量?
以下代码在 ANSI C (C89, C90) 中无效:
int main()
{
printf("Hello world!");
int a = 5; /* Error: all variables should be declared at the beginning of the function. */
return 0;
}
它是 C11 中的有效源代码吗?
【问题讨论】:
-
为什么它不是有效的 ANSI C? ANSI 是否以某种方式拒绝更新其国家标准以遵循 C99?
-
如果您正确理解 ANSI C 的含义,则它是有效的 ANSI C。 ANSI 将那里的标准更新为最新版本。不幸的是,在城市俚语中,术语“ANSI C”错误地适用于 C 89。
-
@JensGustedt:另一种看待它的方式是,ANSI C 确实是 C89,但自 1990 年以来,标准一直是 ISO C,并且 ANSI 已经认可 ISO C 作为标准。 ISO C 90 和 ANSI C 89 之间的区别在于章节编号 AFAIK;否则,案文不变。但这是分裂的头发。 GCC 使用
-ansi作为-std=c89的同义词并且不识别-std=c90(但大多数版本的GCC 识别std=c99,而最近的一些版本识别-std=c11)。 POSIX 过去需要c89C 编译器;它目前需要c99编译器,因为它还没有被修改过。
标签: c c11 variable-declaration