这个程序违背了我在C中学过和学过的所有东西。这是如何编译的?为什么这不需要是int main?为什么不能返回0?你不需要在main之上初始声明sub()吗?这使我感到厌恶。我喜欢把我的功能放在主要位置。程序编译有错误
#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 2014-12-05 07:45:09
在编译之前先启用所有的警告http://stackoverflow.com/questions/26488502/which-section-in-c89-standard-allows-the-implicit-int-rule http://stackoverflow.com/questions/8440816/警告隐式声明的功能http://stackoverflow.com/questions/8220463/c-function-calls-understanding-the-implicit-int-rule – 2014-12-05 10:05:24
@Lundin我应该使用这个,而不是'gcc -std = c90 -pedantic-errors'?维基百科使得它听起来像c11不支持,直到gcc版本4.6。 http://en.wikipedia.org/wiki/C11_%28C_standard_revision%29我已经提供了我使用的版本。 – cokedude 2014-12-06 00:26:19