【发布时间】:2019-09-28 08:32:16
【问题描述】:
我们刚刚被一个拼写错误:“constexpr bool maxDistance=10000;”
gcc 和 clang 都在没有警告的情况下编译它。
这里真正的错误是变量不应该是 bool 类型,而应该是整数类型。
我们如何确保我们将来会收到编译器警告?
#include <iostream>
constexpr bool number = 1234;
int main(int argc, char* argv[])
{
std::cout << number + 10000 << std::endl; // prints 10001.
return number;
}
这里的错误是变量声明了错误的类型,但是clang和gcc都没有给出警告。
gcc -Wall -std=c++14 test.cpp -lstdc++
clang -Wall -std=c++14 test.cpp -lstdc++
(使用 gcc 5.4.0 和 clang 3.8.0)
注意:我已经了解了一个可能的编译标志:-Wint-in-bool-context 但是这似乎没有在我使用的版本 (5.4.0) 和 clang (3.8.0) 中实现。
这是正确的方法吗?
【问题讨论】:
-
我认为在clang和gcc中都没有
bool number = 1234;的警告。 -
将整数分配给布尔值是合法且定义明确的操作,因此编译器不会发出警告。如果需要,请找到支持该选项的静态分析工具
-
MSVC 给出警告:“隐式转换……可能的信息丢失。”
-
@RemyLebeau:对于 OP 的情况,很明显,这是一个错误。没有人会用整数文字初始化
bool。
标签: c++ boolean compiler-warnings constexpr