未选中C++返回语句.Linux <p>(UBUNTU 16.04) 下的

C++ return statement not checked

本文关键字:UBUNTU 下的 C++ 返回 Linux 语句      更新时间:2023-10-16
g++ 5.4.1 将编译以下内容没有错误或警告的程序:
#include <iostream>
std::string foo(){
    int a= 1;
    a++;
}
int main(){
    std::cout << foo();
    return 0;
}

显然,"foo()"中的返回语句丢失了,程序在我的计算机核心转储中。我在问自己为什么没有返回语句在编译时甚至没有警告?我错过了吗东西?

我怀疑您没有在启用警告的情况下进行编译。

像这样编译:

g++ -Wall -Wextra main.cpp

你应该得到:

警告:函数中没有返回语句返回非 void [-Wreturn 类型]

PS:这与 GCC 的版本无关。


编译器

不必生成诊断消息,这就是为什么必须启用警告标志才能让编译器进行投诉的原因。阅读更多内容,请参阅为什么C++代码段编译(non-void 函数不返回值)。

您没有包含相应的警告标志。您可能只使用了以下内容:

g++ source.cpp

加: -Wall-pedantic-Wextra和类似标志:

g++ -std=c++14 -Wall -Wextra -pedantic source.cpp

现场示例
话虽如此,您还应该包括<string>标头:

#include <string>

而不是依靠<iostream>免费弦乐设施.