一、什么是头文件重复包含问题?
举例现在一个工程中有两个.c文件,分别为test1.c和test2.c,还有一个.h文件header.h。
现在在test1.c和test2.c中都引用header.h,此时直接进行编译就会报头文件重复包含error。
原因是编译器编译也是有先后顺序的,如果是先编译test1.c然后再编译test2.c,在编译test1.c时将header.h引入并定义,然后在编译test2.c又将header.h引入并定义,此时就出现header.h被重复引入了,编译器就会报错。
二、解决方法
第一种方法是使用宏定义方式
//header.h 文件
#ifndef _HEADER_H_ //使用宏定义的方式来避免header.h被重复包含
#define _HEADER_H_
/* code */
#endif
注意:上面代码中 “_HEADER_H_” 宏名要避免和程序中的宏明重复,如果程序中有使用“_HEADER_H_” 这个宏名的,编译也会出问题。
第二种方法是使用#pragma once
//header.h文件
#pragma once //告诉编译器只编译一次
/* code */
三、总结
第一种方法程序可移植性较好
第二种发放程序编译效率高一些