次の定義などは、最も単純なマクロ置換です。これは、その名前を文字列で置き換えよ、ということです。置き換えられるべき文字列は任意に設定でき、定義できるものには殆ど文法的な制限はありません。なお、#defineで定義したマクロのスコープは、定義した時点から、そのファイルの最後までです。#define TRUE 1
注意点としては、引用符で囲まれた文字列には置換が適用されない、ということです。
例えば、などという行があったとしても、このTRUEは1には置換されないということです。printf("TRUE");
一方、引数つきのマクロ定義も可能です。これを用いることで、テキストの置換はマクロの呼び方に依存することになります。例えば、A,Bという2つの引数を比較して大きい方を返すようなマクロ max として、と定義すると、行#define max(A,B) ((A) > (B) ? (A):(B))は、次の行に置換されます。(引数の括弧の用い方に注意しなさい)x = max(p+q, r+s);これは大変有用な技術であり、関数呼び出しを使わずに、in-lineコードに展開される「最大値関数」を使っていることになります。関数の場合と違って、データ型が違っても、別のマクロ定義 max を持ってくることなく、最大値計算部分のマクロを利用することができます。x = ((p+q) > (r+s) ? (p+q):(r+s));