C語言編譯器處理時經過的第一個步驟是預處理,就是從.c文件處理為.i文件。在預處理時編譯器做了一些展開替換的處理。
1>頭文件展開,即將#include "stdio.h"類似的文件展開。
2>宏定義的替換工作,即將程序中的宏定義內容替換好。
#include"stdio.h"
#define R 10
int main()
{
int a = R;
}
經過預處理之後代碼變為
//...stdio.h裡的內容未展示
//宏定義的地方已經替換到程序中
int main()
{
int a = 10;<br> return 0;
}
宏定義做的替換是整體替換,和語法無關,它不遵循語法規則。
宏定義一般兩種用法,一種是定義一種常量,另一種是定義一個宏函數。
#define N(n,m) n+m//宏定義
int main()
{
int c;
c = N(1,2);//對1和2相加 <br> return 0;
}
其實經過預處理之後變為
int main()
{
int c;
c = 1 + 2;<br> return 0;
}
另一種應用宏函數,因為宏定義不會考慮語法,它只是作整體代換,所以可以寫出不考慮變量類型的函數,這一點是他的優點
舉例說明,如下代碼:
#define N(n,m) n+m//宏定義
int main()
{
int e = N(10,20) * N(10,20)//預處理之後是int e = 10 + 20 * 10 + 20;
//上面容易算錯誤!!
return 0;
}
3>條件編譯:有些語句希望在條件滿足時才編譯。
#ifdef 標識符
//程序段1
#else
//程序段2
#endif
當標識符已經定義時,程序段1才參加編譯
在其使用時和define一樣也是做了一個替換工作。
對C語言有了一定認識。。。看Linux C語言視頻學的。