- 我决定在其中一个.cpp文件中定义一些内容,以改变预处理器解释已经包含在预编译头文件中的某些头文件的方式
- 我在其中一个.cpp文件中包含另一个头文件,该头文件定义了特定的预处理指令,以改变已经包含在预编译头文件中的头文件的解释方式
- 更糟糕的是,前面的问题可能会递归发生,当某些头文件包含其他头文件时
预编译头文件的使用是否应强制执行某种限制性的编码风格,例如将.cpp文件中包含的头文件数量限制为一个,并且永远不要在.cpp文件中定义内容?
虽然据我所知,微软的编译器可能会通过应用一些MS特定的魔法来处理预编译头文件(因为它提供了/Yc
和/Yu
选项来完成所有的管道工作),但对于GCC来说,似乎这个功能需要在Makefile中进行大量的手动工作和创造性工作,我无法找到一个模板来解决使用预编译头文件时遇到的所有问题。例如,如果我有一个构建多个库的项目,在每次更改后不重新构建所有库,则必须在Makefile中使用一些非常巧妙的sed
技巧来检测当前库所包含的头文件是否已被修改(或者它包含了一个已修改的头文件)。我甚至不敢想象预先构建的头文件实际上会引起哪些复杂的问题,以便构建脚本在每次必要时都可以重建它们。
#include
指令(而且通常应该这样做)。 - Basile Starynkevitchyourapp.h
文件可以作为预处理头文件,当gcc
遇到的第一个词元是#include "yourapp.h"
时,它的yourapp.h.gch
预处理形式才会被使用。 - Basile Starynkevitch