如果头文件要引用head.h,当然要放在头文件了,在只有源文件中引用的情况下,
如果把"head.h"也放在头文件,对编译效率和链接效率有影响吗?有多大影响?

解决方案 »

  1.   

    效果是一样的,但实际处理时必须注意。
    最好放在CPP中包含。放在H中容易引起重复include.
      

  2.   

    就小程序没什么影响
    对于H文件和CPP文件稍多一些的工程影响可就大了!!!
      

  3.   

    to: xhzhang6(zxh)
    能不能说说有多大影响?影响在哪些方面? 原因是什么? 非常感谢!
      

  4.   

    肯定对影响编译效率的比如你将“head.h”放在“export.h”中(且在工程project1中),那么如果“export.h”在其他的地方(比如其他的工程project2)也被引用了,那么,如果你在“head.h”中作些修改,在编译的时候它将把project2也重新去编译一遍,如果放在CPP文件中,只需编译project1即可了如果你的程序较大的话,影响响应地回更大的,所以不需要放在.h文件中的一般不要放进去。
      

  5.   

    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 > 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()
    {}
      

  6.   

    没有影响。
    什么地方使用,就在什么地方调用。另外,你自己定义的头文件,应该有防止重复调用的措施,如:
    #if !defined(HEAD_H)
    #define HEAD_H#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000你的head.h的内容
    #endif // !defined(HEAD_H)