前処理
-E gccの xx.c ------>生成する .I ファイルを
前処理作業は自動的にファイルを生成しません。
仕事:
① マクロ代替的に、第一のインポートファイル、条件付きコンパイル、等
② コメントのコンテンツを削除
第二に、コンパイラ
-S xx.iのGCC ------->生成されたアセンブラ .S
文法エラーが生成されたアセンブラをチェック
仕事:
前処理のソースコードまたはエラーコードの構文の後に確認してください
第三に、コンパイル
-c xx.s GCC ------->オブジェクト・ファイルを生成するの.o
仕事:
オブジェクトファイルにコンパイルされたアセンブリコード(バイナリ)は 、実際にコマンドとして使用されています
第四に、リンク
GCC xx.o ------>実行ファイルを生成するa.outを
リンクの1つまたは複数のターゲットファイルは、実際にコマンドのLDを使用しているデフォルトのa.out実行可能プログラムを生成します
仕事:リンク関数呼び出し
GCC * .oの リンクは、すべてのオブジェクトファイル、実行可能プログラムを生成します
-oは 先のファイル名を指定することができます
注意:
構文エラーチェック:でコンパイル
チェックする関数呼び出しを:リンク段階
前処理コマンド
命令は、前処理段階で処理される
命令#の先頭に
、#が含まれているヘッダファイルを含みます
インポートヘッダーファイルのコードは、
標準ライブラリ関数のファイルヘッダをインポートする必要が呼び出しを
する#include <>との#include「」分化
(設定可能)指定されたパスから<>システムは、ファイルの検索が含まれ
、「現在のディレクトリから検索します」ヘッダファイルは、含ま
カレントディレクトリに見つからない場合は、システムによって指定されたディレクトリは、次を検索するために
、独自のヘッダファイルを書き込ん含む場合、使用「」> <一般的な使用のための標準ライブラリが含まれています
二、#定義
マクロ一般大文字
1のマクロが定義されている前処理段階単純マクロ置換
PI 3.14の#define
2マクロ機能
の#define POW(x)は((X )*(x))を
前処理ステージが動作のみを行いません置き換えます
注:定義マクロが続かないようにしてください。
マクロ機能与える必要があり、各パラメータを括弧を入れて、そして最終的には全体の括弧を追加し、あいまいさを避けるために、
マクロ機能とパラメータリストの間では、余分なスペースを持つことができません
。3. \マクロを接続することができます定義された
単一のライン上で動作するが、1つのマクロ定義として\複数の線で接続されていてもよい一般
4.#することに文字列リテラル識別子であることができる
で#Xの#define括り(X)
(の#defineプリントX)のprintf(#Xは「D =%\ N-」、X)
5.新しい生成することができる##の識別子
役割6.マクロを:
①簡単に変更する
②プログラミング簡素化しない
③パラメータ・タイプをフレキシブル制限を
コードによって定義することができる7の#defineマクロはまた、コンパイル時にマクロ-Dマクロ名を定義するために使用することができます
第三に、条件付きコンパイル
ブランチ選択文の二つの分岐文を実行しますどの分岐を決定するために実行された場合にのみにコードにコンパイルされています
コードのコンパイル時間をコンパイルするためのオプション
条件付きコンパイルを実行するには、マクロの値に基づいての#if
#elifの
の#else#または
の#条件付きコンパイルの終わり#endifの
あなたはどうか、条件付きコンパイルにマクロ定義を使用してマクロを定義した場合に定義されたの#if #ifdefの
マクロ定義されていない場合は#ifndefの
#をundefのマクロ定義を解除するマクロを削除
#IFDEF /#IFNDEF /#場合に定義#endifの// 条件付きコンパイルするかどうかにマクロ定義
の#if /#値のelif #endifの//マクロは、条件付きコンパイルを実行すると
ヘッダファイルガード:
これは、ヘッダファイルに複数の参照を防止するために使用される
ならないもう少し複雑な手順が定義された繰り返し誤差につながる可能性が
#ifndefのXXX_H__
の#define XXX_H__
#endifの// XXX_H__