在以下代码中,函数被声明/定义为int setYear(int year_h){year = year_h;}
(而不是void setYear(...)
,导致 gcc 8 中的运行时崩溃并且-O[X]
仅带有标志。
具体问题:
- gcc 8 中发生了什么变化,因为它在 gcc 7 中工作?
- 我可以使用哪些标志(如果有)在 gcc8 中生成编译错误(而不是警告)?
主.cpp:
#include <iostream>
using namespace std;
int year = 2000;
int setYear(int year_h){year = year_h;}
int main()
{
cout << "Hello World!" << endl;
setYear(2019);
cout << "Year: " << year << endl;
return 0;
}
运行时崩溃:
g++-8 -O2 -o main main.cpp
./main
Hello World!
Hello World!
Segmentation fault (core dumped)
适用于:
g++-7 -O2 -o main main.cpp
或者
g++-8 -o main main.cpp
编辑:在 C++ 中省略返回语句的问题回答了我的第二个问题,但不是第一个问题(关于 gcc 7 和 gcc 8 之间的区别)。