C语言函数定义在main函数之后,而且在main函数之前没有函数原型声明。为什么不会出错?

#include <stdio.h>

//int show_info();
//缺少这句,在GCC下也可以编译运行。

int main(){

show_info();
return 0;
}

int show_info(){

printf("hello\n");
return 0;
}

如代码。不是必须在main函数之前有函数原型的吗?为什么不会出错?

//int show_info()

函数原型声明只是一个好习惯,C11标准并没有强制要求必须给出原型声明。
而且声明函数的同时定义函数也是允许的。追问

这样子的。然而我发现一个比较奇怪的现象。GCC对有的会提示warning。有的不会。比如上边这段代码是完全没有warning 的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-18
不出错是编译工具检查不严格,或是编译工具只是报警告,并不按错误处理。
函数声明只是给编译使用的,用来告诉编译器,函数的正确使用格式,帮助编译器进行相应的错误检查,但程序运行是不需要声明的,只要能找到函数,就可以运行。
第2个回答  2015-09-18
加上
-Wimplicit-function-declaration
选项试试。
相似回答