我已经使用C/C++大约三年了,我不敢相信我以前从未遇到过这个问题!
以下代码编译(我刚刚尝试使用gcc):
#include <iostream>
int change_i(int i) {
int j = 8;
return j;
}
int main() {
int i = 10;
change_i(10);
std::cout << "i = " << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
并且,程序打印i = 10,正如您所料.
我的问题是 - 为什么要编译?我本来期望一个错误,或者至少是一个警告,说有一个未使用的返回值.
天真地,我会认为这是一个类似的情况,当你不小心忘记非void函数中的返回调用.我明白这是不同的,我可以看到为什么这个代码没有任何内在错误,但它似乎很危险.我刚刚在我的一些非常古老的代码中发现了类似的错误,代表了一个可以追溯到很久的错误.我显然应该这样做:
i = change_i(10);
Run Code Online (Sandbox Code Playgroud)
但是忘了,所以它永远不会改变(我知道这个例子很愚蠢,确切的代码要复杂得多).任何想法将不胜感激!