#define
命令#define定義了乙個識別符號及乙個串。在源程式中每次遇到該識別符號時,均以定義的串代換它。ansi標準將識別符號定義為巨集名,將替換過程稱為巨集替換。命令的一般形式為:
#define identifier string
注意:1.該語句沒有分號。在識別符號和串之間可以有任意個空格,串一旦開始,僅由一新行結束。
2.巨集名定義後,即可成為其它巨集名定義中的一部分。
3.巨集替換僅僅是以文字串代替巨集識別符號,前提是巨集識別符號必須獨立的識別出來,否則不進行替換。例如:
#define xyz this is a tes
使用巨集printf("xyz");//該段不列印"this is a testwww.cppcns.com"而列印"xyz"。因為預編譯器識別出的是"xyz"
4.如果串長於一行,可以在該行末尾用一反斜槓' \'續行。
#definelong_string"this is a very long\
string that is used as an example"
5.c語言程式普遍使用大寫字母定義識別符號。
6.用巨集代換代替實在的函式的一大好處是巨集替換增加了**的速度,因為不存在函式呼叫的開銷。但增加速度也有代價:由於重複編碼而增加了程式長度。
巨集定義的注意事項
試圖使用巨集去定義注釋符號是不行的,例如以下**:
#define bsc //
#define bmc /*
#define emc */
bsc my single-line comment
bmc my multi-line comment emc
因為注釋先於預處理指令處理,當展開這些巨集定義的時候自然會出現一堆錯誤。
巨集定義表示式的時候一定不能吝嗇括號。這個不用解釋了。
巨集定義的時候巨集名中最好不要有空格。下面的定義會帶來很多麻煩:
#define su程式設計客棧m (x) ((x)*(x))
一旦使用了#undef撤銷巨集程式設計客棧,則後面的xqtdkzxe**都不能使用這個巨集,除非再次定義。此外,如果沒有#undef的情形下就直接再次定義,後來的定義會覆蓋掉前面的定義。下面**中的c值是4:
#include
#define x 3
#define y x*2
#undef x
#define x 2
int c = y;
int main(int argc, char** ar**)
巨集僅在使用的時候展開,否則即使定義有問題,也不會編譯出錯。如果把上面**中的第二個#define注釋掉,並把c的值賦值為0,即撤銷了x定義,也不會報錯,因為沒有使用y,也就不會展開。
本文標題: 詳解c語言中的#define巨集定義命令用法
本文位址: /ruanjian/c/150134.html
C語言中typedef與 define巨集的區別
1.typedef最簡單的解釋就是給型別取別名,表面上理解為把第二個引數等同於第乙個引數,然後以後定義某個變數時,可以直接使用第乙個變數就可以了 typedef unsigned short uint16 t2.2.define是巨集定義,用來簡單的替換,這個替換的過程是發生在程式預編譯過程,它只會...
C語言中的 巨集 詳解
c語言巨集中 和 的用法 一 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 include include using namespace std define str s s define cons a,b int a e b int main printf st...
C語言中 define 巨集定義的使用總結
例如 define love 520printf d love 使用love時不需要再定義以及賦值,輸出列印為 5201 巨集定義必須寫在函式之外,其作用域為巨集定義命令起到源程式結束。如要終止其作用域可使用 undef命令。2 如果乙個巨集的值超過一行,最後一行之前的行末需要加 例如 define...