簡體   English   中英

抑制宏觀擴張

[英]Inhibit macro expansion

有沒有辦法抑制預處理器宏擴展? 我有一個現有的C頭文件,它使用#define來定義一組整數,我想將它復制到具有相同值名稱的C ++枚舉。 例如(使用C ++ 11):

enum MyEnum {
  VALUE,
  // ...
};

#define VALUE 0

MyEnum convert(int x) {
  if (x == VALUE) {
    return MyEnum::VALUE;
  }
  // ...
}

問題當然是MyEnum::VALUE被轉換為MyEnum::0 ,這會導致語法錯誤。 最好的解決方案是用枚舉替換宏,但不幸的是,在我的情況下這不是一個選項。

我試圖使用連接,但這沒有幫助(編譯器給出了相同的錯誤)。

#define CONCAT(a,b) a##b
// ...
return MyEnum::CONCAT(VA,LUE);  // still results in MyEnum::0

是否有另一種解決方案允許我為宏和枚舉值具有相同的名稱?

你可以取消定義一個宏:

#undef VALUE

包括標題后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM