C プリプロセッサ演算子 新しいページはコチラ
提供: yonewiki
(→# 文字列化演算子 2重引用符" ") |
|||
40行: | 40行: | ||
引数の中で2重引用符中ではエスケープシーケンスが必要な文字が使われている場合は自動的にエスケープシーケンスによって文字列リテラルとして扱われるようにマクロによる置き換え処理をします。したがって、引数の中で\がつかわれていれば、自動で\\にしてくれるし、"が付かれていれば、\"とします。引数全体は2重引用符に囲われた文字列リテラルとして挿入されますので、引数で定義した文字列がマクロ定義によって置き換えるべき値が定義されていなくても、定義値に置き換えるような処理をしないため、動作に問題は生じません。 | 引数の中で2重引用符中ではエスケープシーケンスが必要な文字が使われている場合は自動的にエスケープシーケンスによって文字列リテラルとして扱われるようにマクロによる置き換え処理をします。したがって、引数の中で\がつかわれていれば、自動で\\にしてくれるし、"が付かれていれば、\"とします。引数全体は2重引用符に囲われた文字列リテラルとして挿入されますので、引数で定義した文字列がマクロ定義によって置き換えるべき値が定義されていなくても、定義値に置き換えるような処理をしないため、動作に問題は生じません。 | ||
+ | |||
+ | |||
+ | ==='''<nowiki>#@</nowiki>''' 文字列定数化演算子 1重引用符<nowiki>' '</nowiki>=== | ||
+ | マイクロソフト固有のディレクティブ演算子です。二重引用符の#ディレクティブ演算子とほぼ同じ動作として、一重引用符で文字列定数を扱うものになります。マクロ変数の引数に対して利用される点でも同じような利用方法になります。 | ||
+ | |||
+ | |||
+ | 具体的な利用例は以下のとおりです。 | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | #define __MY_MACRO_SINGLE_QUART_( parameter ) #@parameter | ||
+ | |||
+ | int _tmain(arg,arg[]){ | ||
+ | char cSingleChar = __MY_MACRO_SINGLE_QUART_(&); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | は | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | int _tmain(arg,arg[]){ | ||
+ | char cSingleChar = '&'; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | と置き換えられる。 |