2008年10月4日 星期六

[Live-MAN] 前置處理指令

對於一個 C 程式 編譯之前,
C 編譯器會先處理 C 程式 中含有 #define、#undef、#if、#ifdef、#ifndef、#endif、#elif、#else 及 #include 敘述,
將之置換成一新 C 程式,
再將之編譯 成一 assembly 程式,
再轉成 machine code(或 object code)。
再經由 linker 變成一執行檔。

C/C++包含一些前置處理的指令
均是以#為開頭的指令
以下均是前置處理的指令
#include
把某個檔案整個放入目前的位置。
例:

#include <stdio.h>

就是把stdio.h整個放到這一個指令的位置

#define
把變數定義成某一個常數

#define MAX 5

在compiler的時候就是把MAX直接由5取代

#undef
解除變數的定義

#undef MAX


#if

#if !define(FILE1)
#define FILE1 "file1.h"
#include FILE1
#endif

以上是避免檔案重複include同一個檔案

#if defined (XXX) || defined (YYY)
...
#endif

當有定義XXX或是有定義YYY時,會把...的部分的程式碼加入編譯

#ifndef

#ifndef MAX

判斷MAX是否有被定義過,若沒有則執行此行以下的指令
#ifdef

#ifdef MAX

判斷MAX是否有被定義過,若有則執行以下的指令
#endif
表示#ifndef或#ifdef或#if的結尾

#else
與if相關的前置處理指令配合使用~
#ifdef MAX
...
#else
...
#endif


#if MAX = 2
...
#elif MAX = 3
...
#else
...
#endif


[2009.12.06 補充]
#error

#pragma
[Live-MAN] #pragma 預處理指令

參考資料:
C前置處理
Live-MAN - #pragma 預處理指令
C# 前置處理器指示詞
前置處理器
前處理指令

沒有留言: