gcc/g++对空的主函数给出了不同的响应
gcc/g++ are giving different response to empty main function
我正在使用g++(Ubuntu/Linaro 4.6.1-9ubuntu3)4.6.1gcc(Ubuntu/Linaro 4.6.1-9ubuntu3)4.6.1
如果我制作一个只包含的cpp和c文件
int main(const int argc, const char *const argv[])
{
}
并用CCD_ 1编译,我没有得到任何警告。
如果我用gcc -Wall test_warnings.c
编译它,我会得到你所期望的警告:
test_warnings.c: In function ‘main’:
test_warnings.c:4:1: warning: control reaches end of non-void function [-Wreturn-type]
如果使用-Rewesturn类型而不是-Wall,则会表现出相同的行为。
为什么g++没有给我一个返回丢失的警告?
因为C和C++是不同的语言。
在C++中,在不执行return
语句的情况下到达main()
的末尾相当于执行return 0;
。
在C中,从1990年ISO标准开始,从main()
的末尾脱落会向调用环境返回未定义状态。
C99改变了这一点,本质上采用了C++规则——但gcc默认情况下不实现C99。(尝试使用-std=c99
进行编译。)
在任何情况下,在main()
的末尾添加一个return 0;
语句都没有坏处。
相关文章:
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- C++ 信号和插槽不工作:插槽不响应事件
- NodeJs 服务器充斥着 UDP 广播,不发送响应
- C++关于ENUM的问题。我得到的响应比枚举列表大
- 应用程序在打开的简历中捕获视频后没有响应
- 使用 cpprest (Casablanca) 返回 PDF 响应
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- 如何使用从处理程序调度的最终回调将响应异步返回给调用方on_read?
- 获取加密的正文响应WinHttp HTTPS
- QtConcurrent - 在发布到 UI 线程的数千个结果中保持 GUI 响应
- 同步读取多个 TCP 响应
- HTTP 响应格式不正确?
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- HTTP帖子,无需等待响应
- 问题导致程序停止响应,并且姓氏未正确打印
- AT 命令响应解析器
- 将静态 IP 分配给我的 ESP32 服务器后不再响应
- 用于C++的 TCP/IP 解析器和响应器
- 我会导致太多内存泄漏,以至于我的计算机无响应吗?
- 如何从wxWebView获取响应