1、头文件进行防卫式声明:避免头文件中重复声明,通常利用宏加入include防范(include guard)。宏的名字必须是唯一的,通常习惯以_H__作为后缀。可以使用项目名称_目录_文件名称_H__命名方式。
#ifndef 项目名称_目录_文件名称_H__
#define 项目名称_目录_文件名称_H__
/* ... */
#endif /* 项目名称_目录_文件名称_H__ */
2、 (1)、C中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,枚举类型必须连续可以实现有条件的遍历。通常枚举值用全大写,而类型及函数则用小写。(2)、将整型强制类型转换为枚举。
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
int main()
{
// 遍历枚举元素
for (day = MON; day <= SUN; day++) {
printf("枚举元素:%d \n", day);
}
int a = 1;
enum DAY weekend;
weekend = ( enum DAY ) a; //类型转换
//weekend = a; //错误
}
3、宏的编写技巧:反斜线表示该行未结束,会串接下一行。但是如果宏里有多过一个语句,就需要do{ /* */ } while(0) 包裹成单个语句,否则会有如下问题:
/* 实现语句 */
if (cond)
M();
else
c();
/* 第一种情况 */
#define M() a();b()
/* 预处理后 */
if (cond)
a(); b(); /* b(); 在 if 之外 */
else /* <- else 缺乏对应 if */
c();
/* 第二种情况 */
#define M() { a(); b(); }
/* 预处理后 */
if (cond)
{ a(); b(); }; /* 最后的分号代表 if 语句结束 */
else /* else 缺乏对应 if */
c();
/* 正确情况 */
#define M() do { a(); b(); } while(0)
/* 预处理后 */
if (cond)
do { a(); b(); } while(0);
else
c();
4、构造函数初始化方式,最好用初值列的形式。
5、const:(1)、如果类成员函数没有改变函数变量,在类成员函数后加const,将其定义为常量函数。(2)、如果没有对变量进行修改,在变量前加const,起到保护作用。
6、引用:传参和返回值尽量使用引用,变量为局部变量时返回值不可以传引用。
7、相同类的各个对象互为友元。