我只是通过用GCC(g++)编译它来测试这段代码;
#include <stdio.h>
main(int argc, char **argv){
printf("something");
}
Run Code Online (Sandbox Code Playgroud)
它似乎建立并运行良好,只是一个警告说;
ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
Run Code Online (Sandbox Code Playgroud)
虽然我定义main()没有返回类型,也没有返回任何值.
然后我决定通过使用Visual C++编译器编译它来测试相同的代码,但它有效地抛出了错误:
missing type specifier - int assumed. Note: C++ does not support default-int
Run Code Online (Sandbox Code Playgroud)
并且构建不成功.
我期待GCC抛出错误并停止编译而不是警告并让它成功构建.
为什么GCC给予main()这样的特权,不让它知道它的返回类型?
该计划格式不正确.C++标准不允许省略返回类型.
编译器不将其视为致命错误的原因是历史性的.在1999年标准之前,C确实允许省略函数的返回类型; 它会默认为int.C++派生自C,因此C++的早期(预标准)版本具有相同的规则.
在现代C++中,省略返回类型是一个错误.编译器需要诊断此类错误,但不要求将其视为致命错误.通过打印警告,编译器就标准而言已完成其工作.
不要忽视警告.
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |