zoukankan      html  css  js  c++  java
  • 一个C++宏定义与枚举定义重复的编译错误

    C++的开发效率低是众所周知的,原因比如有:

    • 语言复杂度高
    • 编译效率低
    • 工具链不够完整高效(尤其是linux下)

    另外一个恐怕是不少编译错误让人摸不着头脑,今天碰到一个,举个例子:

      1 #include <stdio.h>
      2 
      3 enum LogLevel {
      4     ERROR,
      5     WARN,
      6     INFO,
      7     DEBUG,
      8     TRACE
      9 };
     10 
     11 
     12 int main()
     13 {
     14     printf("%d
    ", ERROR);
     15 }
     16 

    编译错误为:

    $ g++ -DDEBUG test.cpp 
    test.cpp:7:5: error: expected identifier before numeric constant

    这里的错误,其实是说枚举DEBUG不合法,因为已经有个宏定义也叫DEBUG了。

    如果是一个比较普通的enum名字,刚好在某处不怎么可见的地方被宏定义了,看到这个错误那是相当不知道到底哪里错了。。。

  • 相关阅读:
    USACO 4.1 Fence Rails
    POJ 1742
    LA 2031
    uva 10564
    poj 3686
    LA 3350
    asp.net MVC 3多语言方案--再次写, 配源码
    使用Log4net记录日志
    在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求
    为什么要使用反射机制
  • 原文地址:https://www.cnblogs.com/baiyanhuang/p/3307951.html
Copyright © 2011-2022 走看看