头文件中应该注意的一些小问题

首先应该注意: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,因为编译器会内存对齐,强行将空结构体插入了一个字符站位。

 

posted on 2015-04-21 10:07  远近闻名的学渣  阅读(171)  评论(0)    收藏  举报

导航