活到老,学到老!
分类: LINUX
2010-05-17 16:24:32
1、为了避免那些只能包含一次的头文件被多次包含,可以在头文件中用编译时
条件来进行控制。例如:
/*my.h*/
#ifndef MY_H
#define MY_H
……
#endif
2、常用预编译指令
# 空指令,无任何效果
#include 包含一个源代码文件
#define 定义宏
#undef 取消已定义的宏
#if 如果给定条件为真,则编译下面代码
#ifdef 如果宏已经定义,则编译下面代码
#ifndef 如果宏没有定义,则编译下面代码
#elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif 结束一个#if……#else条件编译块
#error 停止编译并显示错误信息
#warning 只显示错误信息
3、防止由于各种平台和编译器的不同,而产生的类型字节数
typedef unsigned char boolean; /* Boolean value type. */
typedef unsigned long int uint32; /* Unsigned 32 bit value */
typedef unsigned short uint16; /* Unsigned 16 bit value */
typedef unsigned char uint8; /* Unsigned 8 bit value */
typedef signed long int int32; /* Signed 32 bit value */
typedef signed short int16; /* Signed 16 bit value */
typedef signed char int8; /* Signed 8 bit value */
4、关键字static
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
5、关键字volatile
1) 并行设备的硬件寄存器(如:状态寄存器)
2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3) 多线程应用中被几个任务共享的变量
6、关键字const意味着“只读”
7、关键字__interrupt定义一个中断服务子程序(ISR)
1) ISR 不能返回一个值。
2) ISR 不能传递参数。
3) ISR 应该是短而有效率的,在ISR 中做浮点运算是不明智的。
4) printf()经常有重入和性能上的问题。
8、关键字Typedef声明一个已经存在的数据类型的同义字
比宏定义#define PS struct s *更好,因为
dPS p1,p2;扩展为struct s * p1, p2;
定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。