先说明一下:以下程序针对的是C++语言
直接上代码(程序中有错):
file1.h文件如下:
#ifndef HEADER_FILE1
int a;
#define HEADER_FILE1
#endif
file1.cpp文件如下:
#include "file1.h"
main.cpp文件如下:
#include "file1.h"
int main()
{
return 0;
}
上面的程序在连接时会出错,为什么呢?因为在file1.cpp和main.cpp中会同时出现a, 碰撞了,冲突了。上面程序可以改为(正确程序):
file1.h文件如下:
#ifndef HEADER_FILE1
#define HEADER_FILE1
#endif
file1.cpp文件如下:
#include "file1.h"
int a;
main.cpp文件如下:
#include <iostream>
#include "file1.h"
using namespace std;
extern int a; // 不可少,否则访问不到a
int main()
{
cout << a << endl;
return 0;
}
当然,如果程序的很多文件中都要用到圆周率,那怎么办呢?可以采用如下方式:
file1.h文件如下:
#ifndef HEADER_FILE1
const float pi = 3.14f;
#define HEADER_FILE1
#endif
file1.cpp文件如下:
#include "file1.h"
// 该文件现在可以访问到pi
main.cpp文件如下:
#include <iostream>
#include "file1.h"
using namespace std;
int main()
{
cout << pi << endl;
return 0;
}
上面的程序是完全正确的,不会出现冲突。
总结:1. 在头文件中不要出现int a;这样的定义,容易冲突(重定义问题)。
2. 在头文件中不要出现void fun(){}这样的非内联函数定义,容易冲突(重定义问题)。
最后还是不忘补充一句:上面针对的是C++程序,在C程序中,略有不同。