C プリプロセッサ演算子 新しいページはコチラ
提供: yonewiki
1行: | 1行: | ||
+ | [[C PlusPlus#Cにもあった技術|C++]]へ戻る | ||
+ | |||
+ | |||
※このページではC言語にも存在していたという意味で記事タイトルがC プリプロセッサ演算子になっていますが、<br /> | ※このページではC言語にも存在していたという意味で記事タイトルがC プリプロセッサ演算子になっていますが、<br /> | ||
[[C PlusPlus|C++]]でも同様です。[[C PlusPlus|C++]]だけの機能がある場合は明記します。<br /> | [[C PlusPlus|C++]]でも同様です。[[C PlusPlus|C++]]だけの機能がある場合は明記します。<br /> | ||
5行: | 8行: | ||
− | マクロで引数付きのマクロが定義できることを紹介しましたが、引数をどのように扱うかを変更するための演算子3つと、主に#ifディレクティブの条件記述のために利用される定義済マクロ判定を行う演算子1つで、プリプロセッサ演算子は全部で4種類あります。 | + | マクロで引数付きのマクロが定義できることを紹介しましたが、引数をどのように扱うかを変更するための演算子3つと、主に#ifディレクティブの条件記述のために利用される定義済マクロ判定を行う演算子1つで、プリプロセッサ演算子は全部で4種類あります。[[VC PlusPlus:マクロ定義を展開した後のプログラムを確認する方法|理解を助ける情報として、こういったモノ]]もあるので、VisualStudio利用者の人ならば、参考にしてみて下さい。 |
15行: | 18行: | ||
==='''<nowiki>#</nowiki>''' 文字列化演算子 2重引用符<nowiki>" "</nowiki>=== | ==='''<nowiki>#</nowiki>''' 文字列化演算子 2重引用符<nowiki>" "</nowiki>=== | ||
+ | |||
マクロ引数を2重引用符のついた文字列として扱う演算子です。マクロ引数に2重引用符を使うわけですから、プログラムとしても2重引用符を使うような部分の置き換えのために利用するものです。したがって、文字列リテラルによる初期化やprintf命令や、文字列操作関数の引数といった文字列リテラルを必要とするようなプログラムソースコードのマクロ置換のために使われると考えればよいと思います。 | マクロ引数を2重引用符のついた文字列として扱う演算子です。マクロ引数に2重引用符を使うわけですから、プログラムとしても2重引用符を使うような部分の置き換えのために利用するものです。したがって、文字列リテラルによる初期化やprintf命令や、文字列操作関数の引数といった文字列リテラルを必要とするようなプログラムソースコードのマクロ置換のために使われると考えればよいと思います。 | ||
82行: | 86行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
のように置き換えられます。 | のように置き換えられます。 | ||
+ | |||
+ | |||
+ | ==='''defined()''' Defined演算子=== | ||
+ | <nowiki>#</nowiki>if や #elif のようなディレクティブのあとの条件やその他のマクロ定義の返却値として利用することができる演算子で引数に記述した文字列がマクロ定義されていれば返却値は1で定義がなければ返却値は0となる演算子です。マクロ定義がされているかされていないかの結果を数値と返却した値に置き換えてくれる演算子です。 | ||
+ | |||
+ | |||
+ | 具体的には以下のように利用することができます。 | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | #define __MY_MACRO__ | ||
+ | |||
+ | int _tmain(arg,arg[]){ | ||
+ | int Macro; | ||
+ | #if defined(__MY_MACRO__) | ||
+ | Macro = 1 | ||
+ | #else | ||
+ | Macro = 0 | ||
+ | #endif | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | は | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | int _tmain(arg,arg[]){ | ||
+ | int Macro; | ||
+ | #if 1 | ||
+ | Macro = 1 | ||
+ | #else | ||
+ | Macro = 0 | ||
+ | #endif | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | のように置き換えられ、最終的には | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | int _tmain(arg,arg[]){ | ||
+ | int Macro; | ||
+ | Macro = 1 | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | となります。 | ||
+ | |||
+ | |||
+ | [[C PlusPlus#Cにもあった技術|C++]]へ戻る |