如果你使用整数常量和布尔运算符,有没有办法让clang(或gcc)警告你?具体(但不仅仅)在if
上下文中?
我的意思是,我写道:
enum MatchType {MATCHED, FAKE, DUMMY};
if (matchType == MatchType::FAKE || MatchType::DUMMY) {
// ...
}
应该在哪里
if (matchType == MatchType::FAKE || matchType == MatchType::DUMMY) {
使用常量的OR运算显然没有意义(特别是当它不是文字0或1时)。知道如何防止这种情况吗? (我知道在这个特定情况下使用switch
是正确的做法,并且可以防止这种错误,但我仍然对答案感兴趣。)
类似的问题"is there a gcc warning for conditional expression is constant"主要关注的是if
中的表达式 - 在简化后 - 是常量。我问的是你在非bool常量上使用布尔运算符的情况,例如:
bool result = flags && 42; // you might have meant `&`
此外,在这种情况下,条件表达式不常量(取决于a
),但它可能仍然是一个错误:
if (a == 5 && 6) { /*...*/ }
答案 0 :(得分:0)
gcc和clang的最新版本提供了- name: Include var of dest_file.yml into the new_var
include_vars:
file: dest_file.yml
name: new_var
警告,可以对此进行检查。
或者,如果您使用的是C + 11,则可以使用Wint-in-bool-context
enum class
(我假设您的编译器支持C ++ 11,因为您使用的是enum class MatchType {MATCHED, FAKE, DUMMY};
而不是MatchType::FAKE
来引用枚举)
FAKE
比普通enum class
提供更好的类型安全性。参见Why is enum class preferred over plain enum?