许多人都知道,下面的语句把.h文件包括起来,目的是为了避免重复包含:
#ifndef _my_head_file_h
#define _my_head_file_h
...
...
...
#endif
问题是:头文件一般都是变量、函数的声明,重复声明并没有问题啊!
例1:
typedef void myfunction();
typedef void myfunction();
例2:
#define DDD 2
#define DDD 2
以上两例出现在同一个.cpp文件中,vc编译器通过编译。这是不是说,就算是头文件的重复包含,也不会引起编译错误?
原因:
声明是可以重复的,但.h 文件中不只有声明,还有可能有定义,比如最常见的class定义,和const定义,这些都不能重复地出现在同一个编译单位中。
如:
#include <stdio.h>
#define d 3
#define d 3
struct student{
int a;
int b;};
struct student{
int a;
int b;};
void main()
{
struct student a;
}
错误提示:
--------------------Configuration: t - Win32 Debug--------------------
Compiling...
t.c
C:\Documents and Settings\Administrator\t.c(7) : error C2011: 'student' : 'struct' type redefinition
Error executing cl.exe.
t.exe - 1 error(s), 0 warning(s)
错误提示