【发布时间】:2026-02-13 03:45:01
【问题描述】:
我继承了一个相当大的代码库,其中有人以某种方式编写了几个条件,如下所示:
enum
{
FOO_TYPE_A,
FOO_TYPE_B,
FOO_TYPE_C,
FOO_TYPE_D
};
void bar(int fooType)
{
if (fooType == FOO_TYPE_A || FOO_TYPE_B) // <-- This will always be true, since FOO_TYPE_B is nonzero!
{
// Do something intended for only type A or B
}
// Do things general to A,B,C,D
}
条件检查应该明确在哪里:
if (fooType == FOO_TYPE_A || fooType == FOO_TYPE_B)
gcc中是否有警告我可以打开来找到它们,类似于MSDN的C4127?
具体来说,我使用的是 Android NDK r9d。
如果不是,为什么不呢?对于无意分配、无符号 > 0 以及上述愚蠢行为,这似乎是一个有用的包罗万象。
编辑:使代码更详细以说明问题。
【问题讨论】:
-
我没有看到条件中的任何分配。
-
另外,您可以随时尝试
g++ -Wpedantic -Wextra看看 gcc 可能会抱怨什么。 -
C4127 警告更适用于
if (CONSTANT_1 == CONSTANT_2)之类的东西,不是吗? -
我认为他的意思是 if(var == 1 || 2)
标签: c++ c gcc android-ndk