CおよびC&#43;&#43;は、コンパイル前にプリプロセッサが文字列置換に基づくプログラム変換をおこないます。以下の構文がプリプロセッサで処理され、一般的にマクロと呼ばれています。マクロは文字列置換によってコードの中に展開されるため、使い方によってプログラムの実行速度を落さずに、プログラムを読みやすく、また保守しやすくできます。標準ライブラリからファイルを読むときは<>をつけます。カレントディレクトリにあるインクルードファイルの場合、""をつけます。みるのは、マシン毎にソースやコンパイルオプションを変更する場合です。<tt>ifdef</tt>でなく<tt>if</tt>を使った場合、defineしたリテラルではなく真偽を返す定数式が書けます。(定数式しか書けないので、ほとんど使いません。この構文はプログラムソース中でも使えます。以下はプリントデバッグの例です。プリプロセッサでは以下の記号が利用できます。以下のような例はプログラムをわかりづらくするので使用してはいけませんが、参考までに挙げておきます。endl;</tt>と同じです。定数は<tt>const</tt>を使って宣言してください。マクロと同様<tt>const</tt>の値も大文字で定義してください。明示的な整数型やマクロではなく、<tt>enum</tt>を使いましょう。定数は大文字にしましょう。プログラム中で展開したい関数は、マクロではなく<tt>inline</tt>指定しましょう。定義する関数を複数のオブジェクト内で利用したい場合は、ヘッダーファイル内に書けばよいだけです(マクロと同じ)。(y)</tt>と書くのは、化石化しかけた証拠です。C&#43;&#43;プログラマはテンプレートを使ってください。<tt>typedef</tt>を使いましょう。マクロは、個々のプログラムの為にあるのではなく、プログラミング言語自体を拡張するつもりで利用しましょう。マクロの定義が複数行にまたがる場合は、各行の末尾にバックスラッシュを入れます。マクロ名と本体を分けるのはスペース記号です。"関数()"で、関数名と()の間にスペースを入れないようにしましょう。コードに展開された時点で、前後の行から影響を受けないように、かならず括弧でくくります。これは数式に関するマクロで特に重要です。括弧はいくらつけても構わないのでマクロの引数も念のために()をつけて展開させましょう。テンプレートで用が足せる場合は、できる限りテンプレートを用いましょう。マクロ自体は型チェックをおこなわないのでバグの温床になります。ここでは数少ない、使える例を紹介してみます。他に、[[Aritalab:Lecture/Programming/Debug|デバッグの仕方]]を解説したページにもマクロ利用の例があります。C&#43;&#43;のSTLにはイテレータという立派な概念がありますが、STLが整備される前は筆者は以下のようなマクロを利用していた時期がありました。LOOP_VARで使われている##はプリプロセッサにおける結合演算子で、ここではプログラムの行数に対応した変数名を作成します。shellに似た記法で(あるいはアルゴリズム本にある擬似コードのように)集合全体への演算を記述できます。マクロの中身を見ればわかるように、_loop_var_というダミー変数を定義してユーザが指定した変数名vに順番に代入しています。Metabolomics.JPDisclaimers。