1.预编译干的事
文件包含:包含的.h文件找到并展开到#include 所在处 条件编译:预处理器根据#if和#ifdef等编译命令及其后的条件,将源程序中的某部分包含进来或排除在外 宏展开:将源程序文件中出现的对宏的引用展开成相应的宏定义
2.define
注意事项:define 只是简单的替换,例如 #define area(x) x*x
会出现多种错误。错误一 area(2+2) 为 2+2*2+2
错误二 area(2+2)/area(2+2) 2+2*2+2 / 2+2*2+2
正确写法为 #define area(x) ( (x)*(x) )写swap 的define
#define SWAP(t,x,y) \
{\
t temp = *y;\
*y = *x;\
*x = temp;\
}
用\换行,\的意思是說把下一行看作和這行是同一行.換行必須要反斜杠,而且\後面直接回車,不能有空格。
3.大端小端问题
32位无符号整型0x12345678,从高位到低位的字节依次是0x12、0x34、0x56和0x78。
Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
----------------------- 最高内存地址 0xffffffff
栈底
栈
栈顶
-----------------------
NULL (空洞)
-----------------------
堆
-----------------------
未初始 化的数据
----------------------- 统称数据段
初始化的数据
-----------------------
正 文段(代码段)
----------------------- 最低内存地址 0x00000000
检查处理器 大小端
联合体union的存放顺序是所有成员都从低地址开始存放
int checkCPUendian(){
union {
unsigned int a;
unsigned char b;
}c;
c.a = 1;
return (c.b == 1);
} /*return 1 : little-endian, return 0:big-endian*/