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命令や、文字列操作関数の引数といった文字列リテラルを必要とするようなプログラムソースコードのマクロ置換のために使われると考えればよいと思います。
  
61行: 65行:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
と置き換えられる。
 
と置き換えられる。
 +
 +
 +
==='''<nowiki>##</nowiki>'''    トークン連結演算子===
 +
マクロ引数を利用する際、トークンとして独立していなければ引数として扱われない性質をもっていますが、このトークン連結演算子を使えば、この演算子に続く文字列がマクロ引数の文字列と一致した場合、トークンとしての独立していなくても引数値への置き換え処理を実施し、プログラムソースの文字列と連結することを実現します。
 +
 +
 +
例えば以下のように利用することができます。
 +
<syntaxhighlight lang="cpp">
 +
#define __MY_MACRO_TOKEN__( parameter ) int nDigit_##parameter = parameter
 +
 +
int _tmain(arg,arg[]){
 +
  __MY_MACRO_TOKEN__(1);
 +
}
 +
</syntaxhighlight>
 +
 +
<syntaxhighlight lang="cpp">
 +
int _tmain(arg,arg[]){
 +
  int nDigit_1 = 1;
 +
}
 +
</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++]]へ戻る

2021年2月14日 (日) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス