1、使用 #define 定义一年有多少秒
#define SEC_PER_YEAR 365*24*60*60UL
--注意UL的使用,使用长整型无符号,避免16位机器的益处
--不将整个计算结果直接写出,更直观易懂,预处理器会帮忙处理
2、MIN宏
#define MIN (a)>(b): (b):(a)
#define作用:
--类似inline,可以提高代码运行效率
--代码简洁,清晰
3、函数指针
int (*Func)(int*);
4、static的运用
-- 在函数体内定义变量,其值在整个程序运行过程中保持不变
-- 在模块内定义的变量,今年能被此模块内的其他函数访问
-- 在模块内定义函数,则此函数尽在能被此模块内其他函数调用
5、const
int const * a; //整型值为常量,指针值可修改
const int *a; //整型值为常量,指针值可修改
int * const a; //指针值为常量,整型值可修改
int const * a const; //两者都不可修改
6、Volatile
每次使用,都必须重读,不可使用寄存器中值
-- 并行设备的硬件寄存器(如:状态寄存器) -- 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) -- 多线程应用中被几个任务共享的变量
7、BIT manipulation
设置某BIT位的值
a |= (0x1<<5) //设置第五BIT位为1
a &= ~(0x1<<5)设置第五BIT位为0
8、虚析构函数
class Base{
virtual ~Base(){};
}
class Derived: public Base{
virtual ~Derived(){};
}
Base *p = new Derived();
delete p; //基类虚构函数时,避免了内存泄露。
9、数据类型自动转换
unsigned int a = 1;
int b = -20;
BOOL res = a+b>10; //都自动转换为无符号后运算,-20转换为非常大整数
10、注意机器字长
unsigned int compZero = 0xFFFF; //定义为 ~0 更为贴切
unsigned int zero = 0;
11、typedef 与 #define
typedef int * IntPtr;
#define int * IntPtr;
IntPtr a, b;