【发布时间】:2014-12-05 07:00:37
【问题描述】:
这个程序违背了我在 C 中所学的一切。它是如何编译的?为什么这不需要是 int main ?为什么不返回0?您不需要在 main 上方声明 sub() 的初始声明吗?这让我大吃一惊。我喜欢将我的功能保持在 main 之上。
#include <stdio.h>
main()
{
sub ();
sub ();
}
sub()
{
static int y = 5;
printf(" y is %d \n",y);
y++;
}
gcc 版本为:
gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
这似乎是一个旧版本,但还不算老。
https://www.gnu.org/software/gcc/releases.html
如何检查这是 c90 还是 c89?
【问题讨论】:
-
所有这些关于“C 标准如何允许这样做”的 gcc 问题越来越令人厌烦...... 如果你不使用
gcc -std=c11 -pedantic-errors编译,那么 gcc 不是严格符合 C编译器,但它是针对大量奇怪的 GNU 扩展进行编译的非标准编译器。 -
@Lundin 我应该用这个代替
gcc -std=c90 -pedantic-errors吗?维基百科听起来好像直到 gcc 版本 4.6 才支持 c11。 en.wikipedia.org/wiki/C11_%28C_standard_revision%29我已经提供了我正在使用的版本。 -
@coolstuff 是的,用您的编译器支持的最新标准替换,在您的情况下可能是 -std=c99。