Cで書かれたソフトウェアは、Cのソースコードをコンパイルしてインストールする作業の流れになります。
コンパイル(翻訳)とは、実行環境のCPUが理解できる命令への翻訳をすることで、インストールとはコンパイル後の実行ファイル等を適切な場所にコピーする作業になります。

 


コンパイルの流れを見てみると、コンパイラがCソースコードを解釈してオブジェクトファイルを生成し、1つ以上のオブジェクトファイルとこれらが参照しているライブラリにある関数をリンクして実行ファイルを作成します。

 


このうち、コンパイラがオブジェクトファイルを生成する段階でどのようなことが行われているかを以下に記述します。

 


1.「プリプロセスという前処理」
プリプロセス処理はCの処理とは直接関係ないのでCの文法とかは関係なく処理する。
外部ファイルの取り込み、マクロ置換、条件付き前処理など

 


2.「Cの構文解析」
トークン(識別子・キーワード・定数・文字列リテラル・演算子・他の区切子)に分解され解釈される。コメントやブランクは無視される。

 

識別子・・・変数名、関数名などユーザ定義のもので、[a-zA-Z_]の英字で始まり[a-zA-Z0-9_]の英数字がつづく(数字で始まると整数定数と判別がつかなくなる)
キーワード・・・いわゆる予約語。if, while, int, structなど・・
定数・・・整数定数、文字定数、浮動小数点定数、列挙定数
文字列リテラル・・・"Hello world."のように「"」ダブルクォートで囲まれていて展開時には文字列終端を表す\0が末尾に付加
演算子・・・ /, +, %, sizeof()など
他の区切子・・・ 「,」など

 


プリプロセスはCの構文解析前の処理なのでsizeof()演算子やenum定数は使えない