先简单介绍下C语言的标准.
C语言的发展历史大致上分为三个阶段:Old Style C、C89和C99.Ken Thompson和Dennis Ritchie发明C语言时有很多语法和现在并不一样,但为了向后兼容性(Backward Compatibility), 这些语法仍然在C89和C99中保留下来了.C89是最早的C语言规范,于1989年提出,1990年先由ANSI(美国国家标准委员会,American National Standards Institute)推出ANSI版本,后来被接纳为ISO国际标准(ISO/IEC 9899:1990),因而有时也称为C90,最经典的C语言教材[K&R]就是基于这个版本的,C89是目前最广泛采用的C语言标准,大多数编译器都完全支持C89.C99标准(ISO/IEC 9899:1999)是在1999年推出的,加入了许多新的特性,但目前仍没有得到广泛支持,在C99推出之后相当长的一段时间里,连gcc也没有完全实现C99的所有特性.
GCC与Dev-Cpp都是支持C99的,但其默认值不是C99标准,为了使用C99语法可以进行如下操作:
(1) GCC
编译时加入编译选项 -std=C99 (注意C为大写)
(2) Dev-Cpp
step1 工具->编译选项->编译器选项卡中,在"编译时加入以下命令"复选框前打钩,里面输入命令 -std=c99 (与GCC不同,这里c99中的字母c是小写)
step2 工具->编译选项->代码生成/优化选项卡中,在C编译器->支持所有ANSI C标准上选NO
程序里写了这样一句:
for (int i = 0; i < 100; ++i)
用gcc编译通不过,才知道原来gcc还不支持在for语句里声明循环变量。
不禁有点奇怪,这个特性似乎不算很“变态”吧,为什么gcc还没有实现呢?
我用的是gcc 4.2.1。不知道更高版本是不是实现了?
c99中还有哪些特性gcc没有实现呢?
gcc 默认用的是 C89 加 GCC 自己对 C 的扩展,你要用 C99 特性,要加上 -std=c99
文章评论(0条评论)
登录后参与讨论