在我使用过的几个编译器(gcc
除了各种版本之外)我得到一个C99 mode
错误,比如int i
在 for 循环表达式内部而不是在它之前声明(如果我不使用该std=c99
选项)。阅读此处后,我了解gcc
options -ansi
、-std=c89
和-std=iso9899:1990
all 评估为 ANSI C 标准,但我不明白为什么/如果我应该选择c89
标准而不是更新的标准c99
(我假设这是最新的)。
此外,我看到iso
了 C 语言类型标准的多个版本,其中第一个版本(据我所知)是 ANSI 标准的直接端口。 可以肯定地说这iso
将更新他们的 C 标准,但 C 的原始 ANSI 标准将始终相同吗?
奖金问题:
我实际上可以自己解决这个问题,我只是还没有花时间去做,所以如果有人知道他们的头顶,那就太好了,否则没什么大不了的,我稍后会弄清楚:)
我有一本相当新的书The C Programming Language (ANSI)
。我的书总是显示这样的循环:
int i;
for(i = 0; i < foo; i++)
但是很多人(大多数人的小指上都有更多的编程天赋)这样写他们的 for 循环:
(int i = 0; i < foo; i++)
说如果我以第一种方式编写循环,那么i
整个函数都应该可以访问它是否正确,但是如果我以第二种方式编写它,那么无论我用什么标准编译,i
都只能由 for 循环访问?问同样问题的另一种方法是,如果我使用c89
标准编译i
,整个函数都可以访问两个 for 循环,如果我使用c99
标准编译,整个函数i
可以访问第一个 for 循环i
的第二个 for 循环只能由 for 循环访问?