zoukankan      html  css  js  c++  java
  • 关于预编译头文件使用的注意事项

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢: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项目中维护一个副本,手动(或者自己写一个工具)与其他工程中的文件进行同步。

  • 相关阅读:
    Spring 集成Quartz
    windows跟linux文件共享
    5.5.3使用terminfo功能标志
    5.4.1 termios结构,关闭回显功能,一键入字符fgetc立刻返回,不用按下回车键
    5.2与终端进行对话
    5.1对终端进行读写
    4.8资源和限制
    4.7日志
    大小端问题
    QWebView下载文件,QUrl中解析文件名
  • 原文地址:https://www.cnblogs.com/dbylk/p/5650216.html
Copyright © 2011-2022 走看看