《C语言深度剖析》学习笔记三
?第三章 預(yù)處理
注釋先于預(yù)處理指令被處理,所以無法用宏定義注釋
宏定義表達式時,每個參數(shù)都加括號,避免不必要的錯誤
宏定義時: SUM (x) 和SUM(x)不同
使用時: SUM(x) 和SUM (x)一樣
#define X 3
#define Y X*2
#undef X
#define X 2
int a = Y;
printf(“%d\n”, a);
結(jié)果為4;
?
結(jié)構(gòu)中數(shù)據(jù)定義:由小到大
eg.
??????????????? struct ss{
??????????????????????????????? int I;
??????????????????????????????? short a;
??????????????????????????????? char b;
};
涉及到字節(jié)對齊問題
#pragma pack(n) 編譯器將按照n個字節(jié)對齊
#pragma pack()?? 編譯器將取消自定義字節(jié)對齊方式
對齊規(guī)則:
??????????????? 按其類型的對齊參數(shù)(通常是這個類型的大小)和指定對齊參數(shù)中較小的一個對齊。
?
字節(jié)對齊三點:
??????????????? 首先,每個成員分別按自己的方式對齊,并能最小化長度。
??????????????? 其次,復(fù)雜類型(如結(jié)構(gòu))的默認(rèn)對齊方式是它最長的成員的對齊方式,這樣在成員是復(fù)雜類型時,可以最小化長度。
??????????????? 然后,對齊吼的長度必須是成員中最大的對齊參數(shù)的整數(shù)倍,這樣在處理數(shù)組時可以保證每一項都邊界對齊。
?
#運算符
#define SQR(x) printf(“The ad x is %d\n”, ((x)*(x)));
SQR(8); 輸出為The ad x is 64
引號中的字符x被當(dāng)成普通文本來處理,而不是被當(dāng)做一個可以被替換的語言符號。
#define SQR(x) printf(“The ad “#x” is %d\n”, ((x)*(x)));
SQR(8);
輸出為:
The ad 8 is 64
?
##運算符 –粘合劑
??????????????? #define XNAME(n) x##n
??????????????? XNAME(8) -> x8
轉(zhuǎn)載于:https://blog.51cto.com/aotman/992571
總結(jié)
以上是生活随笔為你收集整理的《C语言深度剖析》学习笔记三的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的专业博客启动了!
- 下一篇: 实用的rpm网站