【发布时间】:2016-02-11 01:57:35
【问题描述】:
我们有一个 C++ 源代码,其中包含大量使用 #define 和 enum 进行的定义。最近在分析一个错误时,我们发现有一些定义是使用 #define 预处理器指令进行的,它们也是枚举的成员。但是分配给它们的值是不同的。
例如,
#define ABC 100
typedef enum
{
ABC = 1,
DEF
} MY_ENUM;
ABC 在两个地方定义。
令人惊讶的是,Visual Studio 没有给我们一个错误。甚至没有警告。
我们担心可能有其他定义以相同方式定义并希望找出它们。
提高编译器的警告级别并没有给我们任何错误。当存在这样的重新定义时,我们仍然可以毫无错误地构建源代码。警告数量大幅增加,警告太多,无法一一处理。
有人知道检测这些多重定义的方法吗?
我们使用 Visual Studio 2010 Professional 作为 IDE。
【问题讨论】:
-
这就是为什么你不应该对除宏以外的任何东西使用全大写。
-
听起来是进行大扫除的好时机。将
#define替换为const int ABC = 100;,Visual Studio 会报错。
标签: c++ visual-studio-2010 enums redefinition