公開日
2007-07-10
公開元
灰塵

Cに於けるプリプロセッサ命令

#include

書式

#include filename

意味

filenameで指定されたファイルをそのソースコードに包含する。

コンパイラに設定したインクルードパスからファイルをインクルードする際は、filenameを<と>で圍む。また、ソースコードがある場所からの相對パスを指定してファイルをインクルードする際は、"と"で圍む。

#define

書式

#define macroname literal   // 1
#define funcname(arg, ...) process   // 2

意味

1

macronameの名とliteralの値を持つオブジェクト形式マクロを定義する。

// マクロ展開例
#define MAX 10  // 此のマクロが定義される場合の以下のコードの展開例

int a[MAX]; → int a[10];

int b = MAX; → int b = 10;

int i;
for(i = 0;i < MAX;i++) → for(i = 0;i < 10;i++)

2

funcnameの名とprocessの内容を持つ關數形式マクロを定義する。引數の數は幾つでも構はず、また、引數の型は問はない。process内に用ゐられる識別子は、關數形式マクロfuncnameに與へられた儘の状態で置き換へられるので、副作用に注意する必要がある。

尚、processの内容が複數の文から成立つ場合、以下に示すやうにdo〜while節を使ふとよい。複合文で區切ると、マクロのユーザが關數形式マクロ呼び出しの際、文末にセミコロンをうつことが出來ない。

// マクロ展開例
#define swap(type, a, b) do{type t = a;a = b;b = t;}while(0)

int x, y;
x = 50; y = 40;
swap(int, x, y); → do{int t = x;x = y;y = t}while(0);

#undef

書式

#undef name

意味

nameで指定されたマクロ(オブジェクト形式、關數形式は問はない)を消去する。之以降、nameの名を持つマクロは置き換へられない。また、既にnameの名を持つマクロが#undef指令によつて消されてゐたり、もとより定義されてゐなかつた場合は、何も起らない。

#line

書式

#line linenum filename

意味

現在コンパイラが處理してゐるファイル名をfilenameに、處理中の行をlinenum行目に變へる(實際ハードディスクにあるファイルの名前が變る訣ではない)。現在處理中のファイル名や行番號を表す定數である、__LINE__や__FILE__の内容を變更する。

#if

書式

#if constant

意味

constantで表された定數式が眞であれば、以下、#else,#elif,#endifが表れるまでの文を實行する。詰り、constantには變數は指定出來ない。

#endif

書式

#endif

意味

#ifから始まるif節を打ち切る。

#else

書式

#else

意味

#ifから始まるif節に於て、#ifの條件式が僞でありかつ、#elifがあればその條件式が全て僞の場合、この#elseから#endifまでの文を實行する。

#elif

書式

#elif constant

意味

#ifから始まるif節の入れ子構造を實現する。#else ifと同義。

#ifdef

書式

#ifdef macro

意味

條件式が、「若しmacroといふ名のマクロが定義されてゐれば」に統一されてゐる點を除いて、#ifと同じ。

#ifndef

書式

#ifndef macro

意味

條件式が、「若しmacroといふ名のマクロが定義されてゐなければ」に統一されてゐる點を除いて、#ifと同じ。

#error

書式

#error message

意味

コンパイルを停止し、處理系定義の方法で、messageを出力する。

#pragma

書式

#pragma option

意味

處理系定義のオプションを設定する。