头文件的学习

头文件一般用来包含:
函数原型
使用#define或const定义的符号常量
结构声明
类声明
模板声明
内联函数

但是有一件事必需要清楚,就是上述的各种声明只能声明一次,声明多次编译器会报错.对于这个问题,现在有两种解决方法:
1.在头文件的开始处加上预编译指令:#pragma once.这个指令确保此头文件只能被#include一次.
2.使用宏技术:即:
#ifndef T_H
#define T_H

//将所有声明写在这里
    
#endif

第1种方法不能确保在所有的编译器下通过,属于相对比较新的用法.第2种方法可以在所有的编译器下通过,其理论是通过定义了一个宏来使编译器只声明一次.

对于全局变量,通常是不能放在头文件中的,这样在多个cpp文件#include这个头文件后会引起重复声明错误(即使使用上面的第2种技巧在VS2005的编译器下也是如此,我有些迷惑),那么通常的方法是在某个cpp文件中声明全局变量,然后在头文件中用extern来声明变量,以通知编译器此变量属于其它cpp文件.但是,也可以通过宏这个技巧将全局变量的声明放到头文件中:
#ifdef _JB_ROOT
#define EXT 
#else
#define EXT extern
#endif

//下面声明变量
EXT int var;
当然,需要在某一个cpp文件中(只能是一次,一般是包含main函数的文件)#include这个头文件的前面,声明:#define _JB_ROOT,这样其实是只在第一次时真实的声明了全局变量,其它时候都是声明了extern.
posted @ 2008-01-12 17:15  吴东雷  阅读(322)  评论(0编辑  收藏  举报