巨集就是文字展開,實際中可以展開寫出來發現錯誤。
6.1 不能忽視巨集定義中的空格
6.2 巨集並不是函式
巨集定義乙個函式時,
1、要把每個引數用括號括起來
2、同時也要把整個表示式括起來。
3、要確保巨集中的引數沒有***
#define max(a,b) ((a)>(b)?(a):(b))
max(big,x[i++]),這時++有可能被計算兩次,產生了***。
巨集有可能因為自增減操作產生***,也有可能產生非常龐大的表示式。
消除if else的***:
#define assert(e) \
((void)((e)||_assert_error(__file__,__line__)))
6.4 巨集並不是型別定義
#define t1 struct foo *
typedef struct foo *t2
t1 a,b;
//宣告被擴充套件為struct foo *a,b; b不是指標 。
t2 a,b;
第六章 預處理器
今天花了點時間把第六章看了。1.不能忽視巨集定義中的空格。與巨集呼叫相比,巨集定義顯得 暗藏機關 例如下列 define f x x 1 答案有兩種 1.f x 代表 x 1 2.f 代表 x x 1 正確答案是第二種,因為f與 x 之間多了乙個空格!這一規則不適用於巨集呼叫,只適用 於巨集定義,也...
第六章預處理
在程式設計中,為了方便,有的時候我們會使用巨集定義,首先,我們要明確一點,巨集定義與函式式不同的,巨集定義的功能就是替換,在編譯時替換掉 裡面的使用巨集的地方。如求兩個數中大的乙個 define max x,y x y x y 在使用巨集定義時間,我們要注意幾點 1.定義時中間不能有空格,如 def...
mysql第六章 第六章 mysql日誌
第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...