头文件中应该注意的一些小问题
首先应该注意:c/c++ 中的头文件仅仅是在#ifdef等控制下简单文本替换,头文件保护只是负责不让头文件被多次包含而已。
所以:
1,不要在头文件中使用using NameSpaceXX::xx;以及using namespace xx;这样在包含该头文件的文件里都会引入奇怪的声明,名字冲突污染什么的很麻烦。
2,头文件中声明,然后在cpp文件中定义。如果在头文件中进行变量或者函数的定义,那么如果有两个以上的文件包含了这个头文件,那么在预处理器进行了简单的文本替换之后,相当于在多个文件中同时对该变量或者函数进行了定义,然后喜闻乐见的报重定义错误。
3,在自定义类型中的static成员,一定是在类中声明一次,然后还要在类外定义一次,哪怕
class Fuck{
static const int i = 0;
};
也要在外面加一句
int Fuck::i ;
以表示定义(const变量不能改变值,但静态成员量一定要在类外进行定义。。)
那么如果把这个定义手残写在头文件中,喜闻乐见重定义。。
4, 分清楚定义与声明!!
尤其是union,以及enum,这类东西光声明不定义是不会分配内存的,比如:
struct Fuck1 { union Shit{ struct Bitch{ int a; int b; }; struct Screw{ int c; int d; }; }; }; struct Fuck2 { union{ struct{ int a; int b; }; struct{ int c; int d; }; }; };
那么在32位机上,sizeof(Fuck1) = 1;sizeof(Fuck2) = 8;
为什么Fuck1 会是1,因为编译器会内存对齐,强行将空结构体插入了一个字符站位。
浙公网安备 33010602011771号