我正在使用一个库,该库的路径在返回变量之前未设置变量,而g ++会警告我。有没有一种方法可以在不更改库且不禁用警告的情况下避免此警告?
#include<iostream>
// Begin Library function
inline int foo() {
int y;
if( /*something that will always be true*/ ) y = 42;
return y;
}
// end Library function
void bar(int x) {
std::cout << x;
}
int main() {
int x;
x = foo();
bar(x);
return 0;
}
条件有多复杂?在许多情况下,这样做可以消除此类警告:
if (! (/*something that will always be true*/))
__builtin_unreachable();
x = foo();
或者,如果您构建时没有-DNDEBUG
:
assert(/*something that will always be true*/);
x = foo();
这样,当foo
内联到main
中时,GCC将意识到该条件永远不会为真,并且不会警告未初始化的值。
我得到的错误似乎与声明foo()为inline
的事实有关,因为我通过使用这种方法找到了一种解决警告的方法:link
int main() {
int x;
volatile bool b{true};
if(b) x = foo();
else x = foo();
bar(x);
return 0;
}