Board logo

标题: 头文件的组织 [打印本页]

作者: 电子工匠    时间: 2011-2-11 08:51     标题: 头文件的组织

头文件的组织

C语言中头文件的组织也需要遵循一定的规则,这样才能保证程序结构的清晰。最基本的要求是一个头文件中的东西不要太多。如果程序比较小,所有的常量定义、全局变量定义、结构定义、函数声明放在一个头文件中是可行的;反之则需要划分为多个文件存放。常用的规则包括:

    1、在每个头文件中加上如下的定义:(假设头文件的名字为MyDemo.h)
            

#ifndef MY_DEMO_H
#define MY_DEMO_H

#endif // MY_DEMO_H

这样有助于消灭头文件被多次include导致的错误。

    2、对于全局变量,自然要尽可能少用。如果系统实在需要使用全局变量,就应该遵循一般的用法:在逻辑相关的源文件中定义全局变量,在头文件中进行声明,而不要将定义放到源文件中。

    下面这个办法是我为了处理某个老项目而采用的,正常情况下最好不要使用。如果你想将全局变量统一进行管理,可以用一个单独的文件存放全局变量的定义。例如MyVariable.h,其内容如下:            

#ifndef MY_VARIABLE_H
#define MY_VARIABLE_H

int     gMyInt;
short   gMyShort;   

#endif // MY_VARIABLE_H


  但是这样的定义可能会导致严重的问题,它不允许在多个源文件中include MyVariable.h。我们只能也只需要在一个源文件中include MyVariable.h,而在其他源文件中只能采用extern int gMyInt这样的形式来声明,这可以另外定义一个和MyVariable.h对应的头文件XMyVariable.h来定义这些extern int gMyInt。可是这种方法需要将变量在声明一遍,麻烦不说,还容易产生不一致。其实可以简单地解决这个问题:

#ifndef MY_VARIABLE_H
#define MY_VARIABLE_H
        
#ifndef MY_NO_EXTERN
#define MY_EXTERN extern
#else
#define MY_EXTERN
#endif // MY_NO_EXTERN

MY_EXTERN int      gMyInt;
MY_EXTERN short    gMyShort;

#endif // MY_VARIABLE_H

这下子可以在所有的源文件中include MyVariable.h了,不过需要在其中一个文件中先定义MY_NO_EXTERN,然后再include,以保证变量被定义过一次:                    

#define MY_NO_EXTERN
#i nclude MyVariable.h

3、函数的声明需要考虑C和C++混用的情况。我经常用C写一些底层的代码,然后用C++(多半是VC++)来做界面,并调用底层的C函数。例如:
#ifndef MY__H
#define MY__H

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

int MyFunc(int, char *);

#ifdef __cplusplus
  }
#endif // __cplusplus

#endif // MY__H






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0