引数が文字列 (リテラル) かどうかをプリプロセッサ マクロで判断することはできますか?
例えば:
#define IS_STRING(token) ???
IS_STRING("foo") // expands to 1
IS_STRING(foo) // expands to 0
引数が文字列 (リテラル) かどうかをプリプロセッサ マクロで判断することはできますか?
例えば:
#define IS_STRING(token) ???
IS_STRING("foo") // expands to 1
IS_STRING(foo) // expands to 0
はい。ただし、出力にわずかな違いがあります。
#define IS_STRING(token) "" token
文字列リテラルの場合は問題ありません。非文字列の場合、コンパイラ エラーが発生します。
ロジック:コンパイラは文字列リテラルを自動的に連結するので、文字列リテラルの"" token
場合はうまくtoken
いきます。
ここに関連する議論があります。