C プリプロセッサ演算子 新しいページはコチラ
提供: yonewiki
(→# 文字列化演算子 2重引用符" ") |
(→# 文字列化演算子 2重引用符" ") |
||
19行: | 19行: | ||
具体的には以下のように利用します。 | 具体的には以下のように利用します。 | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | #define __MY_MACRO__( parameter ) printf(#parameter "\n") | ||
+ | |||
+ | int _tmain(arg,arg[]){ | ||
+ | __MY_MACRO__( output: ); | ||
+ | __MY_MACRO__( "output" ":" ); | ||
+ | __MY_MACRO__( \ ); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | は | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | int _tmain(arg,arg[]){ | ||
+ | printf("output:" "\n"); | ||
+ | printf("\"output\" \":\"" "\n"); | ||
+ | printf("\\" "\n"); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | のように置き換えられます。引数の中で2重引用符中ではエスケープシーケンスが必要な文字が使われている場合は自動的にエスケープシーケンスによって文字列リテラルとして扱われるようにマクロによる置き換え処理をします。したがって、引数の中で\がつかわれていれば、自動で\\にしてくれるし、"が付かれていれば、\"とします。引数全体は2重引用符に囲われた文字列リテラルとして挿入されますので、引数で定義した文字列がマクロ定義によって置き換えるべき値が定義されていなくても、定義値に置き換えるような処理をしないため、動作に問題は生じません。 | ||
+ | のように置き換えられます。 |