C語言中define的用法

2021-08-14 08:59:10 字數 1523 閱讀 2319

1 .最簡單且最常見的define用法

#define n 100
編譯器在預處理程式時,會將程式中所有的n用100來替換,換言之,不同於const常量,define其實本質上對文字內容的替換。

下面是define和const的區別:

define是巨集定義,程式在預處理階段將用define定義的內容進行了替換。因此在程式執行時,常量表中並沒有用define定義的常量,系統不為它分配記憶體。

而const定義的常量,在程式執行時,存在常量表中,且系統為它分配記憶體。

define定義的常量,預處理時只是直接進行了替換,因此在編譯時不能進行資料型別檢驗。

而const定義的常量,在編譯時進行嚴格的型別檢驗,可以避免出錯。

define定義表示式時要注意「邊緣效應」

例如:

#define n 1+2 

float a = n/2.0;

/*按照常規做法,可能會認為結果是3/2 = 1.5

但是實際上,結果應該為1+2/2.0 = 2.0

若想要實現3/2,則#define n (1+2)

即為避免邊緣效應,一定要加!括!號!

*/

2 .用define定義函式

舉個例子:

#include

#define pi 3.14

#define s(r) pi*r*r

int main(void)

結果:

3.14*1+2*1+2 = 3.14+2+2 = 7.14

重要的事情再說一遍:巨集其實就是乙個簡單的文字替換!

3 .不常用的define用法

#define conn(x,y) x##y

#define tochar(x) #@x

#define tostring(x) #x

x##y表示x連線y

- 比如: int n = conn(123,456);

- 結果: n=123456;

- char* str = conn(「asdf」, 「adf」);

- 結果: str = 「asdfadf」;

而#@x,其實就是給x加上單引號,結果返回乙個const char。

- 比如:char a = tochar(1);

- 結果:a=』1』;

做個越界試驗 char a = tochar(123);結果是a=』3』; 但是如果引數超過四個字元,編譯器就會報錯!

至於#x,就是給x加上雙引號

4 .定義巨集和取消巨集

定義巨集使用#define

取消巨集定義使用#undef

C語言中 define用法總結

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

C語言中define的用法總結

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

define用法,C語言 define詳解

c語言中,可以用 define 定義乙個識別符號來表示乙個常量。其特點是 定義的識別符號不佔記憶體,只是乙個臨時的符號,預編譯後這個符號就不存在了。預編譯又叫預處理。預編譯不是編譯,而是編譯前的處理。這個操作是在正式編譯之前由系統自動完成的。用 define 定義識別符號的一般形式為 define ...