一個C++巨集定義與列舉定義重複的編譯錯誤

lzprgmr發表於2013-09-07

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名字,剛好在某處不怎麼可見的地方被巨集定義了,看到這個錯誤那是相當不知道到底哪裡錯了。。。

 

 

相關文章