巨集定義 C語言基礎學習筆記

2021-07-08 10:39:30 字數 1219 閱讀 6976

#define

#include

#ifndef

#define maxszie 10000
帶引數的巨集:

#define add(x,y) x+y
#define

plus(x,y)

add(x,y)

#define

add(x,y) ((x)+(y))

//呼叫:

plus(plus(a,b),c);

//呼叫結果:就是按照順序巢狀:

//最終=((c)+(((b)+(a)))

#undef name
#define square(x) x*x

#define square(x) (x)*(x)

//上述兩個定義的區別體現在當x是乙個表示式的時候:比如

square(3+a)

//得到 3+a*3+a

square(3+a)

//(3+a)*(3+a)

//另外,還要注意巨集定義和++運算子聯絡在一起的時候,上述兩個函式的含義又不一樣了,取決於不同的編譯器

a=3;

b=square(a++);

c=square(a++);

//b得到的可能是3×3,結束後a=4;

//而c得到的可能是3×4,結束後a=5;

#ifndef maxsize

#define maxsize 20

#endif

因為#define巨集定義函式是在四處是有害的:

和 #define 巨集不同的是,內聯函式總是對引數只精確地進行一次求值,從而避免了那聲名狼藉的巨集錯誤。換句話說,呼叫內聯函式和呼叫正規函式是等價的,差別僅僅是更快:

// 返回 i 的絕對值的巨集

#define unsafe(i) ( (i) >= 0 ? (i) : -(i) )

// 返回 i 的絕對值的內聯函式

inline

int safe(int i)

int f();

void usercode(int x)

和巨集不同的,還有內聯函式的引數型別被檢查,並且被正確地進行必要的轉換。

巨集定義複雜函式是有害的;非萬不得已不要用

C語言基礎學習筆記 巨集

巨集定義 define用來定義乙個識別符號和乙個字串,用這個識別符號替代這個字串。1.不帶引數的巨集定義 define 巨集名 字串 表示這是一條預處理命令 巨集名,是乙個識別符號,要符合識別符號的命名規則,並要求大寫 字串的位置可以是常量 表示式 格式字串 注意 巨集定義不是語句,不需要在末尾加分...

C語言程式設計 學習筆記 巨集定義

編譯預處理指令 開頭的是編譯預處理指令 它們不是c語言的成分,但是c語言程式離不開它們 define用來定義乙個巨集 如 define pi 3.14159這樣pi這個東西就是3.14159的值 在編譯過程中,計算機會把 中出現的pi全部換成3.14159 也可以有如下定義 define forma...

C語言學習筆記 巨集定義

define 叫做巨集定義命令,它也是c語言預處理命令的一種。所謂巨集定義,就是用乙個識別符號來表示乙個字串,如果在後面的 現了該識別符號,那麼就全部替換成指定的字串。巨集定義是由源程式中的巨集定義命令 define完成的,巨集替換是由預處理程式完成的。define 巨集名 字串 表示這是一條預處理...