2014-12-19 105 views
-1

在C++可以做這樣的事情C++宏與變量沒有括號

#define my_happy_macro(x) do_something_with(x) 

或者也

#define $(x) do_something_with(x) 

我想怎麼辦,不過,是像

#define $x do_something_with(x) 

這樣我寫的時候

$x; 

在我的代碼,預處理器替換它

do_something_with(x); 

是否有可能做這樣的事情?

+8

不,我可憐下一個將要維持這個怪物的人。 – 2014-12-19 00:29:12

+1

不可能。 '$ x'是沒有特殊解析規則的單個標記;你爲什麼要這樣的東西呢? – 0x499602D2 2014-12-19 00:33:05

+0

@ 0x499602D2:在標準的C++中,'$ x'不是一個單一的標記。它是一個由兩個預處理標記組成的序列,'$'(這是一個預處理標記,但不是有效標記),後跟'x'(一個標識符)。由於'$'不是標識符,宏定義'#define $ x do_something_with(x)'是無效的。作爲擴展名,gcc允許在標識符中使用'$'。 – 2014-12-19 02:41:10

回答

2

這不是預處理器可以管理的東西。

作爲別人所說的附錄,除非你真的知道你正在試圖用它們做什麼,否則最好避免大量使用宏,並且有一個很好的理由不要簡單地創建一個工作函數。