詳解C語言中的 define巨集定義命令用法

2022-09-28 10:39:11 字數 1394 閱讀 4861

#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...