一个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\n", ERROR); 15 } 16
编译错误为:
$ g++ -DDEBUG test.cpp test.cpp:7:5: error: expected identifier before numeric constant
这里的错误,其实是说枚举DEBUG不合法,因为已经有个宏定义也叫DEBUG了。
如果是一个比较普通的enum名字,刚好在某处不怎么可见的地方被宏定义了,看到这个错误那是相当不知道到底哪里错了。。。