define用法,C語言 define詳解

2021-10-08 06:47:22 字數 1969 閱讀 5358

c語言中,可以用 #define 定義乙個識別符號來表示乙個常量。其特點是:定義的識別符號不佔記憶體,只是乙個臨時的符號,預編譯後這個符號就不存在了。

預編譯又叫預處理。預編譯不是編譯,而是編譯前的處理。這個操作是在正式編譯之前由系統自動完成的。

用 #define 定義識別符號的一般形式為:

#define  識別符號  常量   //注意, 最後沒有分號

#define 和 #include 一樣,也是以「#」開頭的。凡是以「#」開頭的均為預處理指令,#define也不例外。

#define又稱巨集定義,識別符號為所定義的巨集名,簡稱巨集。識別符號的命名規則與前面講的變數的命名規則是一樣的。#define 的功能是將識別符號定義為其後的常量。一經定義,程式中就可以直接用識別符號來表示這個常量。是不是與定義變數類似?但是要區分開!變數名表示的是乙個變數,但巨集名表示的是乙個常量。可以給變數賦值,但絕不能給常量賦值。

巨集所表示的常量可以是數字、字元、字串、表示式。其中最常用的是數字。

那麼,程式中什麼時候會使用巨集定義呢?用巨集定義有什麼好處呢?我們直接寫數字不行嗎?為什麼要用乙個識別符號表示數字呢?

巨集定義最大的好處是「方便程式的修改」。使用巨集定義可以用巨集代替乙個在程式中經常使用的常量。注意,是「經常」使用的。這樣,當需要改變這個常量的值時,就不需要對整個程式乙個乙個進行修改,只需修改巨集定義中的常量即可。且當常量比較長時,使用巨集就可以用較短的有意義的識別符號來代替它,這樣程式設計的時候就會更方便,不容易出錯。因此,巨集定義的優點就是方便和易於維護。

那麼程式在預編譯的時候是怎麼處理巨集定義的呢?或者說是怎麼處理預處理指令的呢?

其實預編譯所執行的操作就是簡單的「文字」替換。對巨集定義而言,預編譯的時候會將程式中所有出現「識別符號」的地方全部用這個「常量」替換,稱為「巨集替換」或「巨集展開」。替換完了之後再進行正式的編譯。所以說當單擊「編譯」的時候實際上是執行了兩個操作,即先預編譯,然後才正式編譯。#include也是這樣的,即在預處理的時候先單純地用標頭檔案stdio.h中所有的「文字」內容替換程式中#include這一行,然後再進行正式編譯。

需要注意的是,預處理指令不是語句,所以後面不能加分號。這是很多新手經常犯的錯誤。#include 後面也沒有加分號。

巨集定義 #define 一般都寫在函式外面,與 #include 寫在一起。當然,寫在函式裡面也沒有語法錯誤,但通常不那麼寫。#define 的作用域為自 #define 那一行起到源程式結束。如果要終止其作用域可以使用 #undef 命令,格式為:

#undef  識別符號

undef 後面的識別符號表示你所要終止的巨集。比如前面在程式開頭用 define 定義了乙個巨集 m,它原本的作用範圍是一直到程式結束,但如果現在在程式中某個位置加了一句:

#undef m

那麼這個巨集的作用範圍到此就結束了。#undef 用得不多,但大家要了解。

為了將識別符號與變數名區別開來,習慣上識別符號全部用大寫字母表示。巨集定義用得最多的地方是在陣列中用於指定陣列的長度。下面來寫乙個程式:

純文字

複製

# include 

# define num 5

int main(void)

;printf("請輸入%d個數:", j);

for (i=0; i

for (i=0; i

printf("\n");

return 0;

}輸出結果是:

請輸入5個數:5 4 3 2 1

5 4 3 2 1

num 是定義的巨集,它表示的是其後的常量(而不是變數)。此外,程式中用雙引號括起來的巨集在預處理的時候是不會被巨集替換的。因為在 c 語言中,用雙引號括起來表示的是字串。下面再寫乙個程式看一下:

純文字

複製

# include 

# define pi 3.14159

int main(void)

輸出結果是:

請輸入圓的半徑:1

s=pi*r^2 = 3.141590

C語言 define用法

define用法及注意事項 1.一般形式 define 識別符號 記號序列 例 define g 9.8 2.帶引數形式 define 識別符號 識別符號表 opt 記號序列 例 define square x x x 注意事項 注意括號使用,不然可能會出現歧義,如果定義成 define squar...

c語言define的用法

1 define的簡單定義作用 define相當於乙個簡單的文字替換,對於普通的常量定義,我就不必多說了,但是對於類似於函式定義的形式,可能會出現錯誤,例如 define add x,y x y 用到 中時會出現問題,比如計算式子c add x,y d,本意是計算出x與y的和之後在分別與c,d做乘積...

C語言 define的用法

1.簡單的巨集定義 define 識別符號 替換列表 替換列表可以是數,字串字面量,標點符號,運算子,識別符號,關鍵字,字元常量。注意 替換列表是可以為空的 典型錯誤 define n 100 int a n 這樣會成為int a 100 這裡會處理成為一種標識記號一樣 define n 100 i...