# (単一番号記号) 演算子は、
関数類似マクロのパラメーターを文字ストリング・リテラルに変換します。
例えば、以下のディレクティブを使用してマクロ ABC が定義される場合、
#define ABC(x) #x
これ以降のマクロ ABC の起動はすべて、ABC
に渡された引き数を含む文字ストリング・リテラルに展開されます。
次に例を示します。
呼び出し
| マクロ展開の結果
|
ABC(1)
| "1"
|
ABC(Hello there)
| "Hello there"
|
# 演算子を、ヌル・ディレクティブと混同してはなりません。
# 演算子は、下記の規則に従って、関数類似マクロ定義で
使用してください。
- 関数類似マクロの中の # 演算子に続くパラメーターは、
マクロに渡された引き数を含む文字ストリング・リテラルに変換されます。
- プリプロセッサーは、マクロに渡された引き数の前または後ろにある
空白文字を削除します。
- マクロに渡された引き数内に組み込まれた複数の空白文字は、
単一のスペース文字に置き換えられます。
- マクロに渡された引き数にストリング・リテラルがある場合、およびそのリテラル内に
¥ (円記号) 文字がある場合には、マクロ展開時に、元の ¥
の前に 2 番目の ¥ 文字が挿入されます。
- マクロに渡された引き数に " (二重引用符) 文字がある場合、マクロ展開時に、"
の前に ¥ 文字が挿入されます。
- 引き数のストリング・リテラルへの変換は、その引き数でマクロが
展開される前に行われます。
- マクロ定義の置換リスト内に複数の ## 演算子
または # 演算子がある場合、その演算子の評価の順序
は定義されていません。
- マクロ展開の結果が有効な文字ストリング・リテラルでない場合、その
振る舞いは定義されません。
# 演算子の例
以下の例は、# 演算子の使用法を示したものです。
#define STR(x) #x
#define XSTR(x) STR(x)
#define ONE 1
呼び出し
| マクロ展開の結果
|
STR(¥n "¥n" '¥n')
| "¥n ¥"¥¥n¥" '¥¥n'"
|
STR(ONE)
| "ONE"
|
XSTR(ONE)
| "1"
|
XSTR("hello")
| "¥"hello¥""
|
関連参照
