在我的项目中,我将许多函数的返回值从
bool
更改为枚举值。
问题出在整合上。编译器不会警告我错误使用这些函数。
我正在使用 g++(带有 C++14)和“-Wall -Wextra -Werror”标志
让我们看一个产生警告的示例:
typedef enum {
VALUE_1,
VALUE_2,
VALUE_3
} MY_ENUM;
bool bar() {
return VALUE_3;
}
因此,在此示例中,我们返回 VALUE_3 并正确获取错误:
error: enum constant in boolean context [-Werror=int-in-bool-context]
但是,如果我们稍微改变一下这个例子,编译器将不会产生任何错误:
typedef enum {
VALUE_1,
VALUE_2,
VALUE_3
} MY_ENUM;
MY_ENUM foo() {
return VALUE_3;
}
bool bar() {
return foo();
}
当然我知道enum是int类型,bool是int类型,所以编译器可以处理它。但至少我期待某种警告?
我也尝试过 clang,但两个例子都得到了相同的结果。 我的项目中的问题是我更改了大约 150 个函数的返回值,并且有大约 300 个调用。所以在没有任何警告的情况下我很容易错过一些......
我可以让它对我大喊大叫吗?
几个想法:
https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
添加-Wextra。该网站表示,并非所有警告都是由 -Wall 显式添加的,可能需要显式添加。请注意,枚举的隐式转换仅适用于 c。看起来你标记了 c++。
关于原始转换。
希望这能让你有所收获。