C++头文件中不应该放哪些东西?

      先说明一下:以下程序针对的是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 
#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 
#include "file1.h"
using namespace std;

int main()
{
	cout << pi << endl;

	return 0;
}
     上面的程序是完全正确的,不会出现冲突。


     总结:1. 在头文件中不要出现int a;这样的定义,容易冲突(重定义问题)。

                  2. 在头文件中不要出现void fun(){}这样的非内联函数定义,容易冲突(重定义问题)。

     
     最后还是不忘补充一句:上面针对的是C++程序,在C程序中,略有不同。


     








你可能感兴趣的:(S1:,C/C++,s2:,软件进阶)