1. GCC编译时问题
在由多个C语言文件组成的程序中,对于头文件的管理非常重要。头文件提供给用户一个接口,用户从中可以知道可以调用哪些函数,实现哪些功能,而不必去管这些功能的具体实现。因此,写好头文件是非常关键的。在头文件中,最常见的问题是"头文件的重复包含"。其意思是同一头文件被源文件包含多次。例如,定义了头文件test1.h和test2.h,其中test2.h包含test1.h,在test3.c中包含了test2.h,那么会造成test3.c对test1.h包含两次,导致重复包含问题。如果在test1.h定义了变量,在gcc编译时就会报"变量重复定义"错误。注意:这里是gcc编译错误。gcc编译过程和链接过程是不相同的过程。在这里需要使用下面的宏进行定义:
#ifndef _TEST1_H_
#define _TEST1_H_
/*头文件内容*/
#endif
解释: 这三条指令是预处理指令,表示如果没有定义_TEST1_H_,就定义_TEST1_H_.
为了说明它的作用,以test1.h, test2.h和test3.c为例子,当test3.c包含test1.h和test2.h会出现下面的情形:
#ifndef _TEST1_H_
/*头文件内容*/
#define _TEST1_H_
#endif
#ifndef _TEST1_H_
/*头文件内容*/
#define _TEST1_H_
#endif
第1次,由于没有定义_TEST1_H_,所以进行定义。当定义_TEST1_H_后,ifnde