#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 巨集名 字串 表示這是一條預處理...