关于预编译头文件使用的注意事项

本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/



在编写MFC项目时,必须要开启编译器的“使用预编译头”选项,如果此时项目需要与其他非MFC项目共享一些源码文件,就会引发问题:

  1. MFC项目的所有cpp文件必须引用一个预编译头文件(默认情况下为“stdafx.h”),其中包含了整个项目需要共用的头文件
  2. 非MFC项目中则没有上面这个需求,项目中可能直接就没有“stdafx.h”这个头文件的定义

最开始我想到了一个解决的思路是使用宏定义来决定需要共享的cpp文件是否include “stdafx.h”头文件:

// Author :大便一箩筐 2016-07-07

#ifdef _XXX_PROJECT__
#    include "stdafx.h"
#endif

结果发现编译器会报出一个编译错误:意外的#endif

搜索一番后发现原因如下:
预编译头文件的实现机制是在处理预处理指令前在项目所有的cpp文件中查找 #include "stdafx.h" 指令,如果查找失败,则会编译报错;如果查找成功,则会忽略这个指令前所有的代码,再对cpp模块执行编译。
在启用预编译头的项目中 #include "stdafx.h" 指令必须放在cpp中所有有效代码的前面。上面的报错就是因为 #ifdef XXX_PROJECT_ 语句直接被编译器忽略了。

因此解决办法只能是将cpp文件在MFC项目中维护一个副本,手动(或者自己写一个工具)与其他工程中的文件进行同步。

posted @ 2016-07-07 15:16  大便一箩筐  阅读(649)  评论(0编辑  收藏  举报