为了让咱自己的程序看起来专业,咱抛弃了一统江山的单文件形式,采用模块化设计,:-)。这就牵扯到应该把什么塞到C语言的头文件的问题。
作为一般规则, 你应该把这些东西放入头(.h) 文件中:
² 宏定义(预处理#defines)
² 结构、联合和枚举声明
² typedef 声明
² 外部函数声明
² 全局变量声明
当声明或定义需要在多个文件中共享时, 尤其需要把它们放入头文件中。特
别是, 永远不要把外部函数原型放到.c 文件中。另一方面, 如果定义或声明为一个.c 文件私有, 则最好留在.c 文件中。
----------摘自《C语言常见问题集》
当使用#include语句将头文件引用时,相当于将头文件中所有内容,复制到#include处。为了避免因为重复引用而导致的编译错误,头文件常具有
#ifndef LABEL
#define LABEL
//代码部分
#endif
的格式。其中,LABEL为一个唯一的标号,命名规则跟变量的命名规则一样。常根据它所在的头文件名来命名,例如,如果头文件的文件名叫做hardware.h,
那么可以这样使用:
#ifndef __HARDWARE_H__
#define __HARDWARE_H__
//代码部分
#endif
这样写的意思就是,如果没有定义__HARDWARE_H__,则定义__HARDWARE_H__,并编译下面的代码部分,直到遇到#endif。这样,当重复引用时,由于__HARDWARE_H__已经被定义,则下面的代码部分就不会被编译了,这样就避免了重复定义。
咱照这些个金科玉律搞了一通。遇到一个问题就是我在一个头文件中声明了几个全局变量,然后把它include到要使用的.c文件中。结果一编译就提示我变量未声明。你说我那个郁闷呀,明明在那里,明明include了,它怎么不行呢?""、<>的也试了,死活不行。难道是ICC不支持头文件中声明变量?百思无果,只好乖乖的再声明一把。看着那一堆不专业的,多余的声明,郁闷呀。
隔数日读《C语言常见问题集》,发现一段代码有include 句,心中一动,莫不是?一试之下,果然通过了。原来库里本有time.h文件,我也取了个time.h文件的名,ICC又把当前目录(Debug目录)和个人写的(非库)头文件(Source\H目录)分开放置了,所以""也不好使了。问题找到,咱也舒心了,也记取个教训,名字要个性化,:-)。
阅读(4308) | 评论(0) | 转发(0) |