Cマクロに空白を強制しますか?

c c-preprocessor macros stringification
Cマクロに空白を強制しますか?

特別な命名スキームに従って新しい関数を定義する次のマクロがあります。

#define CREATE_HOOK_STUB( func ) void ##func_STUB() { /* some code*/ }

ただし、プリプロセッサは常に void`と ## func_STUB`を連結しますが、明らかにその位置の空白を保持したいのです。

`## func_STUB`に文字列を追加するだけでよいことを知っていますが、これは私が望むものではありません。 これをどのように解決しますか?

  0  0


ベストアンサー

私はあなたが本当に欲しいものに近いと思います:

#define CREATE_HOOK_STUB( func ) void func##_STUB() { /* some code*/ }

ただし、https://stackoverflow.com/questions/216875/in-macros/217181#217181 [このリンクされたSOの回答]も参照する必要があります。これには、トークン貼り付け演算子の動作に関する追加の詳細があります。

__
トークン貼り付け( ‘##’)または文字列化( ‘#’)の前処理演算子を使用している場合に注意すべきことの1つは、すべての場合に適切に機能するために余分なレベルの間接参照を使用する必要があるということです。

これを行わず、トークン貼り付け演算子に渡された項目がマクロ自体である場合、おそらく望んでいない結果が得られます…​
__

6


タイトルとURLをコピーしました