头文件中不要去定义函数与变量
2014-04-04 16:02
465 查看
定义函数
如果现在在1.h文件中定义一个函数
#include
using namespace std;
void fun1()
{
cout<<"fun1()"<<endl;
}
在源文件2.cpp中这样使用
#include "1.h"
//extern void fun1(); //有没有此申明都不报错
void fun2()
{
fun1();
}
在源文件3.cpp中这样使用,就会报错了,此时讲提示有重复定义fun1。
#include "1.h"
void fun3()
{
fun1();
}
原因:
编译器在编译时候的一个编译单元是*.o,在所生成的N个*.o文件中,任何变量或者函数只能有一个定义,否则在链接时候,链接器不知道要使用哪个*.o文件中的定义。所以链接器讲产生重复定义的链接错误。
对于#include, 它讲把所包含的头文件内容全部放到源文件里面,所以对于上面2.cpp和3.cpp,编译时候将会类似于:
#include
using namespace std;
void fun1()
{
cout<<"fun1()"<<endl;
}
void fun2()
{
fun1();
}
对于3.cpp
#include
using namespace std;
void fun1()//fun1又定义了一次啦,链接肯定要出错咯~
{
cout<<"fun1()"<<endl;
}
void fun3()
{
fun1();
}
因而在平常时候,我们不要讲函数定义在头文件中。只在头文件中进行声明,在源文件中实现。这样对于大型工程,有助于代码文件的有效管理。
定义变量
在1.h里定义int g_x = 0;如果只在一个cpp文件中调用include“1.h”,可以编译通过,如果在多个文件中调用include“1.h”,就会编译失败,提示重定义。
如果现在在1.h文件中定义一个函数
#include
using namespace std;
void fun1()
{
cout<<"fun1()"<<endl;
}
在源文件2.cpp中这样使用
#include "1.h"
//extern void fun1(); //有没有此申明都不报错
void fun2()
{
fun1();
}
在源文件3.cpp中这样使用,就会报错了,此时讲提示有重复定义fun1。
#include "1.h"
void fun3()
{
fun1();
}
原因:
编译器在编译时候的一个编译单元是*.o,在所生成的N个*.o文件中,任何变量或者函数只能有一个定义,否则在链接时候,链接器不知道要使用哪个*.o文件中的定义。所以链接器讲产生重复定义的链接错误。
对于#include, 它讲把所包含的头文件内容全部放到源文件里面,所以对于上面2.cpp和3.cpp,编译时候将会类似于:
#include
using namespace std;
void fun1()
{
cout<<"fun1()"<<endl;
}
void fun2()
{
fun1();
}
对于3.cpp
#include
using namespace std;
void fun1()//fun1又定义了一次啦,链接肯定要出错咯~
{
cout<<"fun1()"<<endl;
}
void fun3()
{
fun1();
}
因而在平常时候,我们不要讲函数定义在头文件中。只在头文件中进行声明,在源文件中实现。这样对于大型工程,有助于代码文件的有效管理。
定义变量
在1.h里定义int g_x = 0;如果只在一个cpp文件中调用include“1.h”,可以编译通过,如果在多个文件中调用include“1.h”,就会编译失败,提示重定义。
相关文章推荐
- 多个".h"文件中声明及定义 全局变量和函数
- 不要在头文件中定义变量
- 文件搭建后找不到变量/函数定义问题
- 为什么头文件中不要写函数定义
- opencv学习(四)头文件申明/main函数格式定义/程序(变量)命名规则/printf函数
- 头文件中不要去定义函数
- c++ 变量不要定义在.h 头文件当中(main already defined in *.obj 解决方法)
- 【Skynet】C头文件不要定义函数?
- C语言中尽量不要在头文件中定义变量
- C语言如何跨文件调用函数定义中声明的变量
- extern用法,全局变量,全局函数与头文件(重复定义)
- 多个".h"文件中声明及定义 全局变量和函数
- 变量一般不要定义在.h文件中
- 变量一般不要定义在.h文件中
- 转载 永远不要在.h文件中定义变量!
- C语言如何跨文件调用函数定义中声明的变量
- c++模板类/模板函数的声明与定义应该放在头文件里,不要分开来写类中函数的声明与定义
- 为什么不要在头文件中写上函数定义?
- 最好不要在头文件里面包含定义变量
- 变量一般不要定义在.h文件中