#include "head.h"放在头文件或源文件有区别吗? 如果头文件要引用head.h,当然要放在头文件了,在只有源文件中引用的情况下,如果把"head.h"也放在头文件,对编译效率和链接效率有影响吗?有多大影响? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 效果是一样的,但实际处理时必须注意。最好放在CPP中包含。放在H中容易引起重复include. 就小程序没什么影响对于H文件和CPP文件稍多一些的工程影响可就大了!!! to: xhzhang6(zxh)能不能说说有多大影响?影响在哪些方面? 原因是什么? 非常感谢! 肯定对影响编译效率的比如你将“head.h”放在“export.h”中(且在工程project1中),那么如果“export.h”在其他的地方(比如其他的工程project2)也被引用了,那么,如果你在“head.h”中作些修改,在编译的时候它将把project2也重新去编译一遍,如果放在CPP文件中,只需编译project1即可了如果你的程序较大的话,影响响应地回更大的,所以不需要放在.h文件中的一般不要放进去。 dellfox(幽谷之狐) 影响有多大?jianqing(jianqing) 说的是一种情况在头文件过多的包含其他的头文件时,表面上好像都包含了其他定义进行了声明由于其他头文件又可能包含了本头文件,这样就会出现在未声明某些类型时就使用了他们,编译是无法通过的!!!!可以对两个类的头文件互相包含其他两个头文件进行试验而两个类都有其他两个类类型的指针成员变量。这个例子比较简单,比较容易看出问题,对于较多的类时,就会稀里糊涂了,很难发现的不管怎麽改变头文件的顺序都是无法通过的// AAA.h: interface for the CAAA class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_AAA_H__C5B2E7BE_4B7C_4ABB_A245_13577453507C__INCLUDED_)#define AFX_AAA_H__C5B2E7BE_4B7C_4ABB_A245_13577453507C__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include "BBB.h"class CAAA {public: CAAA(); virtual ~CAAA(); CBBB *m_bbb;};#endif // !defined(AFX_AAA_H__C5B2E7BE_4B7C_4ABB_A245_13577453507C__INCLUDED_)// BBB.h: interface for the CBBB class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_BBB_H__CEDE2639_ED17_4EE1_AE44_11D5A144D7EE__INCLUDED_)#define AFX_BBB_H__CEDE2639_ED17_4EE1_AE44_11D5A144D7EE__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include "AAA.h"class CBBB {public: CBBB(); virtual ~CBBB(); CAAA *m_aaa;};#endif // !defined(AFX_BBB_H__CEDE2639_ED17_4EE1_AE44_11D5A144D7EE__INCLUDED_)********************************解决办法:在头文件对其他类型进行声明,在CPP文件对类型包含定义的头文件// AAA.h: interface for the CAAA class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_AAA_H__C5B2E7BE_4B7C_4ABB_A245_13577453507C__INCLUDED_)#define AFX_AAA_H__C5B2E7BE_4B7C_4ABB_A245_13577453507C__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CBBB ;class CAAA {public: CAAA(); virtual ~CAAA(); CBBB *m_bbb;};#endif // !defined(AFX_AAA_H__C5B2E7BE_4B7C_4ABB_A245_13577453507C__INCLUDED_)// AAA.cpp: implementation of the CAAA class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "AAA.h"#include "BBB.h"//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////CAAA::CAAA(){}CAAA::~CAAA(){}// BBB.h: interface for the CBBB class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_BBB_H__CEDE2639_ED17_4EE1_AE44_11D5A144D7EE__INCLUDED_)#define AFX_BBB_H__CEDE2639_ED17_4EE1_AE44_11D5A144D7EE__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CAAA;class CBBB {public: CBBB(); virtual ~CBBB(); CAAA *m_aaa;};#endif // !defined(AFX_BBB_H__CEDE2639_ED17_4EE1_AE44_11D5A144D7EE__INCLUDED_)// BBB.cpp: implementation of the CBBB class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "BBB.h"#include "AAA.h"//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////CBBB::CBBB(){}CBBB::~CBBB(){} 没有影响。什么地方使用,就在什么地方调用。另外,你自己定义的头文件,应该有防止重复调用的措施,如:#if !defined(HEAD_H)#define HEAD_H#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000你的head.h的内容#endif // !defined(HEAD_H) 偶是新人!偶学习windows核心编程所遇到的问题!关于入口点函数! 怎样才能让exe运行时显示一个崩溃窗口,而不是直接关闭掉? 如何转换编码的问题!!有这样的函数吗? 关于inline的错误!!! 怎么样有CListCtrl显示m_pSet中的数据? 求:谁有离线浏览器的源码下载啊。 这是怎么错的 怎样给分?来者有分。 各位大虾,如何给对话框程序添加主菜单? 如何在对话框里绘制坐标系?(急) 使用SQLSetPos更新行内容没有成功 命令提示行问题
最好放在CPP中包含。放在H中容易引起重复include.
对于H文件和CPP文件稍多一些的工程影响可就大了!!!
能不能说说有多大影响?影响在哪些方面? 原因是什么? 非常感谢!
jianqing(jianqing) 说的是一种情况
在头文件过多的包含其他的头文件时,表面上好像都包含了其他定义进行了声明
由于其他头文件又可能包含了本头文件,这样就会出现在未声明某些类型时
就使用了他们,编译是无法通过的!!!!
可以对两个类的头文件互相包含其他两个头文件进行试验
而两个类都有其他两个类类型的指针成员变量。
这个例子比较简单,比较容易看出问题,对于较多的类时,就会稀里糊涂了,很难发现的
不管怎麽改变头文件的顺序都是无法通过的// AAA.h: interface for the CAAA class.
//
//////////////////////////////////////////////////////////////////////#if !defined(AFX_AAA_H__C5B2E7BE_4B7C_4ABB_A245_13577453507C__INCLUDED_)
#define AFX_AAA_H__C5B2E7BE_4B7C_4ABB_A245_13577453507C__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#include "BBB.h"
class CAAA
{
public:
CAAA();
virtual ~CAAA();
CBBB *m_bbb;
};#endif // !defined(AFX_AAA_H__C5B2E7BE_4B7C_4ABB_A245_13577453507C__INCLUDED_)
// BBB.h: interface for the CBBB class.
//
//////////////////////////////////////////////////////////////////////#if !defined(AFX_BBB_H__CEDE2639_ED17_4EE1_AE44_11D5A144D7EE__INCLUDED_)
#define AFX_BBB_H__CEDE2639_ED17_4EE1_AE44_11D5A144D7EE__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#include "AAA.h"class CBBB
{
public:
CBBB();
virtual ~CBBB();
CAAA *m_aaa;
};#endif // !defined(AFX_BBB_H__CEDE2639_ED17_4EE1_AE44_11D5A144D7EE__INCLUDED_)
********************************解决办法:
在头文件对其他类型进行声明,在CPP文件对类型包含定义的头文件// AAA.h: interface for the CAAA class.
//
//////////////////////////////////////////////////////////////////////#if !defined(AFX_AAA_H__C5B2E7BE_4B7C_4ABB_A245_13577453507C__INCLUDED_)
#define AFX_AAA_H__C5B2E7BE_4B7C_4ABB_A245_13577453507C__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000class CBBB ;class CAAA
{
public:
CAAA();
virtual ~CAAA();
CBBB *m_bbb;
};#endif // !defined(AFX_AAA_H__C5B2E7BE_4B7C_4ABB_A245_13577453507C__INCLUDED_)
// AAA.cpp: implementation of the CAAA class.
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "AAA.h"
#include "BBB.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////CAAA::CAAA()
{}CAAA::~CAAA()
{}
// BBB.h: interface for the CBBB class.
//
//////////////////////////////////////////////////////////////////////#if !defined(AFX_BBB_H__CEDE2639_ED17_4EE1_AE44_11D5A144D7EE__INCLUDED_)
#define AFX_BBB_H__CEDE2639_ED17_4EE1_AE44_11D5A144D7EE__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CAAA;
class CBBB
{
public:
CBBB();
virtual ~CBBB();
CAAA *m_aaa;
};#endif // !defined(AFX_BBB_H__CEDE2639_ED17_4EE1_AE44_11D5A144D7EE__INCLUDED_)
// BBB.cpp: implementation of the CBBB class.
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "BBB.h"
#include "AAA.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////CBBB::CBBB()
{}CBBB::~CBBB()
{}
什么地方使用,就在什么地方调用。另外,你自己定义的头文件,应该有防止重复调用的措施,如:
#if !defined(HEAD_H)
#define HEAD_H#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000你的head.h的内容
#endif // !defined(HEAD_H)