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