Aritalab:Lecture/Programming/Cpp/Macro

From Metabolomics.JP
< Aritalab:Lecture | Programming | Cpp
Revision as of 16:42, 12 October 2010 by Adm (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


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;

マクロの書き方

マクロは、プログラミングの為にあるのではなく、

マクロ全体は () か {} で囲む

コードに展開された時点で、前後の行から影響を受けないように、かならず括弧でくくります。括弧はいくらつけても構わないのでマクロの引数もかならず()をつけて展開させましょう。

=

Personal tools
Namespaces

Variants
Actions
Navigation
metabolites
Toolbox