【发布时间】:2015-06-20 22:34:21
【问题描述】:
clang 似乎忽略了包含的头文件中出现的警告:
// what.hpp
class What {
public:
What() {
int x = x;
}
};
// main.cpp
#include <iostream>
#include "what.hpp"
int main()
{
int y = y;
std::cout << "y is: " << y << std::endl;
What w;
}
用 g++ (4.9.2) 编译得到:
$ g++ -dumpversion && g++ -Wall -Wextra main.cpp -o main
4.9.2
In file included from main.cpp:3:0:
what.hpp: In constructor ‘What::What()’:
what.hpp:5:17: warning: ‘x’ is used uninitialized in this function [-Wuninitialized]
int x = x;
^
main.cpp: In function ‘int main()’:
main.cpp:5:13: warning: ‘y’ is used uninitialized in this function [-Wuninitialized]
int y = y;
用clang编译同样的东西:
$ clang++ --version && clang++ -Wall -Wextra main.cpp -o main
Ubuntu clang version 3.6.0-2ubuntu1~trusty1 (tags/RELEASE_360/final) (based on LLVM 3.6.0)
Target: x86_64-pc-linux-gnu
Thread model: posix
main.cpp:5:13: warning: variable 'y' is uninitialized when used within its own initialization [-Wuninitialized]
int y = y;
~ ^
1 warning generated.
我不确定,如果我使用 clang 错误或者这确实是一个错误? 有什么提示吗?提前致谢。
【问题讨论】:
-
这可能取决于
x完全未使用(在任何地方都没有引用它),因此clang完全忽略了它。尝试在What构造函数中添加类似的cout。 -
@MatteoItalia 确实,正如我在回答中指出的那样,我发现了一个关于这个确切情况的 clang 错误报告,它被认为是一项功能。