下面都清楚吗?
数组-->指针数组-->函数指针数组
指针-->数组指针
指针 -->函数指针
【规则1-2-1】为了防止头文件被重复引用,用ifndef/define/endif 结构产生预处理块。
【建议1-2-2】头文件中只存放“声明”而不存放“定义”,即不要在头文件定义变量等
【建议1-2-3】对于全局变量,在C文件定义,在头文件中extern int g_value 这类声明,其他文件包含该头文件即可。
【建议1-2-3】宏定义重新定义变量类型,如下,好处简单,而且长度易懂不会错
#ifndef U8
#define U8 unsigned char
#endif
#ifndef S8
#define S8 char
#endif
#ifndef U16
#define U16 unsigned short
#endif
#ifndef S16
#define S16 short
#endif
#ifndef U32
#define U32 unsigned long
#endif
#ifndef S32
#define S32 long
#endif
【规则3-1】类名和函数名用大写字母开头的单词组合而成。
例如:
c1ass Cnode;//类名
void Draw( void);//函数名
void SetValue( int value);//函数名
【规则3-2】变量和参数用小写字母开头的单词组合而成。
例如:
BOOL f I ag ;
int drawMode;
【规则3-3】常量全用大写的字母,用下划线分割单词。
例如:
const int MAX=100;
【规则3-4】静态变量加前缀s_(表示static )
例如:
static int s_initValue; //静态变量
【规则3-5】如果不得已需要全局变量,则使全局变量加前缀g_(表示global)
例如:
int g_howManyPeople;//全局变量
【规则3-6】类的数据成员加前缀m_(表示member),这样可以避免数据成员与
成员函数的参数同名。
例如:
void Cbject::SetValue( int width, int height)
{
m_width = width;
m_height=height;
}
【规则4-3-1】不可将布尔变量直接与TRUE、FALSE 或1、0 进行比较。
假设布尔变量名字为flag,它与零值比较的标准if 语句如下:
if (flag) // 表示flag 为真
if (!flag) // 表示flag 为假
【规则4-3-4】应当将指针变量用“==”或“!=”与NULL 比较。
if (p == NULL) // p 与NULL 显式比较,强调p 是指针变量
if (p != NULL)
【规则5-1-1】 尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串。对于程序的常量(除了一些循环长度),都不要直接写在程序中,应该事先定义出来)
例如:
#define MAX 100 /* C 语言的宏常量 */
const int MAX = 100; // C++ 语言的const 常量
const float PI = 3.14159; // C++ 语言的const 常量
【规则6-1-2】参数命名要恰当,顺序要合理。
参数的顺序要遵循程序员的习惯。一般地,应将目的参数放在前面,源参数放在后面。
void StringCopy(char *strDestination,const char *strSource);
【规则6-1-3】如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。
void StringCopy(char *strDestination,const char *strSource);
补充:
(1)不要定义unsigned int 和 int 变量,因为这两个变量在单片机和ARM的长度不一致
(2)某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;
(3) 模块内的函数和全局变量需在.c文件开头冠以static关键字声明;
(4) 永远不要在.h文件中定义变量!