Aritalab:Lecture/Programming/Cpp/Macro
From Metabolomics.JP
< Aritalab:Lecture | Programming | Cpp(Difference between revisions)
(New page: __FORCETOC__ ==マクロとは何か== プログラムの先頭に <tt>#define</tt> 文で記述された内容は、コンパイラにわたる前にプリプロセッサによって処...) |
Revision as of 16:42, 12 October 2010
Contents |
マクロとは何か
プログラムの先頭に #define 文で記述された内容は、コンパイラにわたる前にプリプロセッサによって処理されます。 マクロは文字列置換によってコードの中に展開されるため、使い方によってプログラムの実行速度を落さずに、プログラムを読みやすく、また保守しやすくできます。
マクロを使ってはいけない例
定数値の宣言
定数はconstを使って宣言してください。マクロと同様constの値も大文字で定義してください。
const double PI = 3.1415;
列挙型の宣言
明示的な整数型やマクロではなく、enumを使いましょう。定数は大文字にしましょう。
enum { TYPE_CHAR, TYPE_DOUBLE, TYPE_FLOAT, TYPE_INT };
インライン関数の定義
プログラム中で展開したい関数は、マクロではなくinline指定しましょう。
template<class T> inline void swap(T& x, T& y) { T tmp = x; x = y; y = tmp; }
定義する関数を複数のオブジェクト内で利用したい場合は、ヘッダーファイル内に書けばよいだけです(マクロと同じ)。
大小比較
#define MAX(x,y) (x) > (y) ? (x) : (y)と書くのは、化石化したCプログラマーです。 C++プログラマはテンプレートを使ってください。
template<class T> inline bool max(const T& x, const T& y) { return (x > y) ? x : y; }
自分流の型宣言
typedefを使いましょう。
typedef void* GenPtr;
マクロの書き方
マクロは、プログラミングの為にあるのではなく、
マクロ全体は () か {} で囲む
コードに展開された時点で、前後の行から影響を受けないように、かならず括弧でくくります。括弧はいくらつけても構わないのでマクロの引数もかならず()をつけて展開させましょう。