C プリプロセッサ演算子のソースを表示
新しいページはコチラ
移動:
案内
,
検索
※このページではC言語にも存在していたという意味で記事タイトルがC プリプロセッサ演算子になっていますが、<br /> [[C PlusPlus|C++]]でも同様です。[[C PlusPlus|C++]]だけの機能がある場合は明記します。<br /> <br /> <big><big>'''C プリプロセッサ演算子'''</big></big> マクロで引数付きのマクロが定義できることを紹介しましたが、引数をどのように扱うかを変更するための演算子3つと、主に#ifディレクティブの条件記述のために利用される定義済マクロ判定を行う演算子1つで、プリプロセッサ演算子は全部で4種類あります。 *'''<nowiki>#</nowiki>''' 文字列化演算子 2重引用符<nowiki>" "</nowiki> *'''<nowiki>#@</nowiki>''' 文字列定数化演算子 1重引用符<nowiki>' '</nowiki> *'''<nowiki>##</nowiki>''' トークン連結演算子 *'''defined()''' defined演算子 ==='''<nowiki>#</nowiki>''' 文字列化演算子 2重引用符<nowiki>" "</nowiki>=== マクロ引数を2重引用符のついた文字列として扱う演算子です。マクロ引数に2重引用符を使うわけですから、プログラムとしても2重引用符を利用使うような部分の置き換えのために利用するものです。したがって、文字列リテラルによる初期化やprintf命令や、文字列操作関数の引数といった文字列リテラルを必要とするようなプログラムソースコードのマクロ置換のために使われると考えればよいと思います。 具体的には以下のように利用します。 <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重引用符に囲われた文字列リテラルとして挿入されますので、引数で定義した文字列がマクロ定義によって置き換えるべき値が定義されていなくても、定義値に置き換えるような処理をしないため、動作に問題は生じません。 のように置き換えられます。
C プリプロセッサ演算子
に戻る。
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ