C語言中的宏定義也叫做預處理命令,預處理命令是C語言本身的組成部分,不能直接對它們進行編譯。
1.基本概念;
1>預處理不是C語句,是在編譯前進行的
2>預處理功能主要用於下3種情況:
Ø 宏定義
Ø 文件包含
Ø 條件編譯
3>宏是在編譯前進行的,程序不能直接對它們進行編譯,由預處理程序先進行替換。
說明:
Ø 一個預處理命令占用一個單獨的行,命令末尾不使用分號作為結束符。
Ø 宏定義是專門用於預處理命令的一個專用名詞,它與定義變量的含義不同,它只做字符替換,不分配內存空間。
2.不帶參數的宏
1>用一個指定的標識符(即名字)來代替一個字符串,它的一般形式為
#define 標識符 字符串
Eg:
#define MAX_NUM 100
它的作用是在本程序文件中使用指定的標識符MAX_NUM來替代 100這個字符串。
2>宏定義是用宏名代替一個字符串,也就是做簡單的置換,不做正確性檢查。(預編譯時不做任何語法檢查,只有在編譯已被宏展開後的源程序時才會發現語法錯誤並報錯)
3>宏定義不是C語句,不必在行末加分號。如果加了分號則會連分號一起進行替換
4>#definde出現在A處,則宏名的有效范圍為定義命令之後到本源文件之後到本源文件結尾。
5>可以通過#undef命令終止宏定義的作用域.
#define MAX_NUM 100;
Void main()
{
……………………. MAX_NUM的作用范圍
………………….
};
#undedf MAX_NUM
f()
{
………………………….
…………………………
}
說明:當解除宏定義時,只需要指出宏標識符而不必給出後面的字符串。
6>在進行宏定義時,可以引用已定義的宏名,可以層層置換(即宏可以嵌套)
#define PI 3.141596
#define R 3.0
#define L 2*PI*R
#define S PI*R*R
7>對程序中使用雙引號括起來的字符串,即使與宏名相同,也不進行置換。
eg;
printf(“L =%f\n,s=%f\n”,L,S);
在printf中雙引號內的L不進行替換,雙引號外的進行替換。