避免g ++-由库引起的未初始化

问题描述 投票:1回答:2

我正在使用一个库,该库的路径在返回变量之前未设置变量,而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;
}
g++
2个回答
1
投票

条件有多复杂?在许多情况下,这样做可以消除此类警告:

if (! (/*something that will always be true*/))
  __builtin_unreachable();
x = foo();

或者,如果您构建时没有-DNDEBUG

assert(/*something that will always be true*/);
x = foo();

这样,当foo内联到main中时,GCC将意识到该条件永远不会为真,并且不会警告未初始化的值。


0
投票

我得到的错误似乎与声明foo()为inline的事实有关,因为我通过使用这种方法找到了一种解决警告的方法:link

int main() {
  int x;
  volatile bool b{true};
  if(b) x = foo();
  else x = foo();
  bar(x);
  return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.