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