复杂工程中头文件众多,很容易发生包含顺序、重复引用以及循环引用导致的编译链接错误!最近整理工程中文件引用时遇到不少这方面的问题!一般来说,包含顺序问题会导致某些类型、函数等无定义,只要对工程有功能、框架性的了解,这方面的问题很容易避免!

     重复引用在几乎所有的工程中随处可见,如果头文件格式不对,重定义的错误提示跃然纸上!一般来说,有两种方式可以在重复引用头文件而不发生错误:

     1、头文件中加上#pragma once

      这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次。

     2、#ifndef,#define,#endif用来防止某个宏被多次定义,防止头文件重复编译。

         两者差别在于:#pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过

         现在基本上已经是每个编译器都有这个定义了;#ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通

         过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。

      头文件循环引用在包含过程中形成了循环,彼此依赖,去除这类错误需要打破这个循环,MFC中可以在预编译文件中包含头文件消除这种情况!不过从代码的有效性和效率方面,应该避免在Include中引用其他头文件,需要引用其他类和类型的地方尽量采用前向声明!前向声明不要类型的定义,可以提高编译效率,降低文件间的依赖性!

引用自http://blog.csdn.net/Ocean2006/article/details/5438997