编译运行源代码时出现错误error: ‘::main’ must return ‘int’,将main函数返回类型由void改为int,编译运行成功。通过搜集资料知道,这是由于C标准变化产生的问题。
在世界第一个完整的C语言标准C89/C90中,main()是正确的。但在C99标准中,只有以下两种定义方式是正确的:
int main(void)
int main(int argc,char *argv[])
main函数的返回值类型必须是int,这样返回值才能传递操作系统。如果main函数的最后没有写return语句的话,C99规定编译器要自动在生成的目标文件中加入return 0,表示程序正常退出。
一般情况下,在编译文件时我们不会关注采用的标准,只有当需要使用某个特定标准的特性,或是要规范所有代码时,我们可以给编译器指定C语言标准,限制所采用的标准。C99标准是C语言的第二个官方标准,但是各个公司对C99的支持所表现出来的兴趣不同。GCC和其它一些商业编译器支持C99的大部分特性,微软和Borland却似乎对此不感兴趣。
C语言标准虽然是国际标准化组织制定的,但是具体编译器的实现和标准制定还是有所不同的。比如GNU GCC 编译器就添加了自己的语法规则,还有嵌入式领域的Keil C51编译器(多定义了自己的数据类型);还有基于llvm框架的Clang编译器;还有和Visual Studio2015集成的VC++ Compiler(包含了微软自定义的内联汇编的语法)都有各自的特殊语法规则,但大体来说每个c语言编译器还是实现了标准文档里面的大部分特性。所以如果需要帮助文档,查找所用的编译器的官方文档是最实用的。
最流行的C语言编译器有以下几种:GNU Compiler Collection 或称 GCC;Microsoft C 或称 MS C;Borland Turbo C 或称 Turbo C。