5

引数が文字列 (リテラル) かどうかをプリプロセッサ マクロで判断することはできますか?

例えば:

#define IS_STRING(token) ???

IS_STRING("foo")  // expands to 1
IS_STRING(foo)    // expands to 0
4

1 に答える 1

4

はい。ただし、出力にわずかな違いがあります。

#define IS_STRING(token) "" token 

文字列リテラルの場合は問題ありません。非文字列の場合、コンパイラ エラーが発生します。

ロジック:コンパイラは文字列リテラルを自動的に連結するので、文字列リテラルの"" token場合はうまくtokenいきます。

ここに関連する議論があります。

于 2012-07-24T04:01:44.033 に答える