C マクロ 新しいページはコチラ
提供: yonewiki
(→#undef) |
|||
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行: | ||
− | マクロはC++言語においては、プリプロセッサの中での変数を使ったプログラム全体のテキスト文字列の一括置換処理を行う処理のための命令を意味していて、#define ディレクティブによってマクロ変数を定義できます。 簡単な使い方から複雑な使い方であるものまで種々のマクロが存在するため、最初の基礎の理解だけに留めていると、複雑なマクロ変数や変数の定義であるマクロ宣言に出くわしたとき、理解に苦しむことになります。 | + | マクロはC++言語においては、プリプロセッサの中での変数を使ったプログラム全体のテキスト文字列の一括置換処理を行う処理のための命令を意味していて、#define ディレクティブによってマクロ変数を定義できます。 簡単な使い方から複雑な使い方であるものまで種々のマクロが存在するため、最初の基礎の理解だけに留めていると、複雑なマクロ変数や変数の定義であるマクロ宣言に出くわしたとき、理解に苦しむことになります。[[VC PlusPlus:マクロ定義を展開した後のプログラムを確認する方法|こういう方法]]もあるので、VisualStudio利用者の人ならば、参考にしてみて下さい。 |
11行: | 14行: | ||
==='''#define'''=== | ==='''#define'''=== | ||
+ | |||
まず、マクロの基本ですが、マクロ変数を定義するだけで、変数の中に入れる値を意識しない使い方は以下のとおりです。プログラム全体に関わる定数値処理や定型文法処理の切り替えが必要な時に活用することができます。サンプルでは一回だけの変換につかっているので実用的ではありませんが、変換の具体例を示すための強引なマクロ利用サンプルになっていることに留意して下さい。 | まず、マクロの基本ですが、マクロ変数を定義するだけで、変数の中に入れる値を意識しない使い方は以下のとおりです。プログラム全体に関わる定数値処理や定型文法処理の切り替えが必要な時に活用することができます。サンプルでは一回だけの変換につかっているので実用的ではありませんが、変換の具体例を示すための強引なマクロ利用サンプルになっていることに留意して下さい。 | ||
182行: | 186行: | ||
− | <nowiki>#</nowiki>undef 解放するマクロ変数名 | + | '''<nowiki>#</nowiki>undef 解放するマクロ変数名''' |
具体的には以下のように記述します。 | 具体的には以下のように記述します。 | ||
+ | <syntaxhighlight lang="cpp" line start="1"> | ||
+ | #define __MY_MACRO__ | ||
+ | #ifdef __MY_MACRO__ | ||
+ | #define __MY_MACRO1(a,b)__ ( 5000 + (a) + (b)) | ||
+ | #endif | ||
+ | |||
+ | #ifdef __MY_MACRO__ | ||
+ | #undef __MY_MACRO1__ | ||
+ | #undef __MY_MACRO__ | ||
+ | #endif | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 上記のように引数付きマクロ変数でも、解放するときは引数の記述を省略できます。定義されていないマクロ変数を#undefディレクティブで解放する指示をしてもエラーにはなりません。もちろん、#ifdefディレクティブを使って、定義されているマクロ変数だけを解放するように組み込むこともできます。 | ||
+ | |||
+ | |||
+ | [[C PlusPlus#Cにもあった技術|C++]]へ戻る |