GCC - 删除"is used uninitialized in this function"警告
gcc - removing "is used uninitialized in this function" warning
在将 -O2 -Wall 标志添加到 gcc (4.4.6) 后从警告中清除代码。我在某些遗留代码中有很多警告。这是演示问题的非常简化的版本:
1 #include <cstdio>
2
3 bool init(bool& a)
4 {
5 return true;
6 }
7
8 int main()
9 {
10 bool a;
11
12 if (!init(a))
13 {
14 return 1;
15 }
16
17 if (a)
18 {
19 printf("okn");
20 }
21 }
当将其编译为"gcc main.cpp-O2 -Wall"时,我收到:
main.cpp:17: warning: `a' is used uninitialized in this function
在实际代码中,init() 仅在初始化 "a" 时才返回 true,因此未初始化的 "a" 没有任何用处。
可以执行 Whan 来修复警告。
将
bool a;
更改为bool a = false;
将删除此警告。
编译器不会知道init(a)
是"初始化"的,它只看到程序尝试调用具有未初始化变量的函数。
如果您不想用某个值初始化变量,则可以使用 GCC 的诊断编译指示:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"
if( a )
#pragma GCC diagnostic pop
如果您的代码在初始化所有内容时存在性能问题,这可能很方便。当然,在您的示例中,使用 bool a = false;
显然是更好的选择。
int main()
{
bool a = false;
...
始终初始化所有变量!
将 -Wno-uninitialized 添加到编译选项
相关文章:
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 如何修复"error: ‘_1’ was not declared in this scope"?
- C++ "Invalid use of 'this' in non-member function" ,
- 类中的数组变量C++导致"was not declared in this scope"实现文件的一个函数中错误,但在构造函数中不会导致错误
- 如何解决"cout was not declared in this scope"错误?
- 为什么程序显示我"was not declared in this scope"?
- 为什么我会收到此警告? "Member 'x' was not initialized in this constructor"
- 即使包含 <time.h 后仍"‘CLOCK_PER_SEC’ was not declared in this scope"错误>
- С 错误"s1, s2 are used uninitialised in this function"
- this->field vs. this.field in C++
- Windows 10 环境中的"This version of XAudio2 is available only in Windows 8"错误
- "C4649: attributes are ignored in this context"的含义是什么?
- 我正在接受"Error: string was not declared in this scope"
- C++ 我一直在"was not declared in this scope error"
- Lambda`s internal this in c++
- 将 .ui 文件导入 Qt5 C++时出错"was not declared in this scope"
- 编译 CPP 应用程序时出错。 "error: 'posix_memalign' was not declared in this scope"
- main.cpp中的错误:函数库中的函数"not declared in this scope",但实际上是
- C++ substr 方法 - "invalid use of ‘this’ in non-member function"
- delete this in QTimer::singleShot