2016-10-01 23 views
1

マクロはプリプロセッサコマンドを呼び出すことができますか?例えば、私が何かのように、マクロはプリプロセッサコマンドを呼び出すことができますか?

#define PreProcessor(x, y) #define x ((y)+1) 
+0

いいえ、できません。 – Peter

+1

同じ行に#ディレクティブを書くことはできません。 – BLUEPIXY

+0

[Cのマクロ生成マクロ?](http://stackoverflow.com/questions/860273/macro-producing-macros-in-c) –

答えて

3

を書くことができます§6.10.3.4、3のように、また、プリプロセッサディレクティブで何かにマクロを展開することはできません

その結果、完全にマクロ置き換え前処理トークン列 は、それが1 ...

012に似ている場合でも、前処理指令として処理されていません

しかし、条件付きマクロ自体を定義することが可能である:

#if CONDITION_A_IS_MET 
#define x ((y)+1) 
#else 
#define x /*...some other definition*/ 
#endif 

またはX-macroを使用します。

#define PreProcessor(x) X(x, ((x) + 1)) 

/*...later*/ 

#define X(a, b) printf("%d, %d", a, b) 
PreProcessor(5) /* Outputs 5, 6 */ 

その機能のための一般的なケースのほとんどをカバーします。

関連する問題