加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

检测C源中枚举和#define同名的定义

发布时间:2020-12-16 09:59:59 所属栏目:百科 来源:网络整理
导读:我们有一个C源代码,它使用#define和enum进行大量定义.最近在分析错误时,我们发现使用#define预处理器指令进行了一些定义,这些定义也是枚举的成员.分配给它们的值虽然不同. 例如, #define ABC 100typedef enum{ ABC = 1,DEF} MY_ENUM; ABC在两个地方定义. 令
我们有一个C源代码,它使用#define和enum进行大量定义.最近在分析错误时,我们发现使用#define预处理器指令进行了一些定义,这些定义也是枚举的成员.分配给它们的值虽然不同.

例如,

#define ABC 100

typedef enum
{
  ABC = 1,DEF
} MY_ENUM;

ABC在两个地方定义.

令人惊讶的是,Visual Studio没有给我们一个错误.甚至没有警告.

我们担心可能会有其他定义以相同的方式定义并希望找到它们.

提高编译器的警告级别并没有给我们任何错误.当存在这样的重新定义时,我们仍然可以无错误地构建源.警告的数量大量增加,并且有太多的警告要逐一进行.

有谁知道检测这些多重定义的方法?

我们使用Visual Studio 2010 Professional作为IDE.

解决方法

使用枚举类而不是枚举.这样,您可以确保在正确的位置使用正确的东西

您可以通过以下答案获得更好的主意
Enum vs Strongly typed enum

注意:枚举类是C 11功能,不属于Visual Studio 2010支持的功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读