说我有一个常数:
#define PI 3.14
说我有一个多个头文件和源文件的静态库。 如果我宣布这个头文件,将其范围适用于所有的源文件? 还是做源文件需要包括与申报的头PI
?
说我有一个常数:
#define PI 3.14
说我有一个多个头文件和源文件的静态库。 如果我宣布这个头文件,将其范围适用于所有的源文件? 还是做源文件需要包括与申报的头PI
?
他们将需要包括其中包含的#define PI 3.14的文件,否则将预处理不读的#define线,随后编译就失败了。
在C ++中,一个很好的方式去思考编译过程的是,每个单独的C ++文件是通过预处理,这需要所有的#define,的#include,和其他预处理语句并将其替换整个代码第一次运行,然后编译(在至此,C ++文件以及任何通过的#include带来了治疗的几乎一样,如果他们是一个非常大的单个文件),然后在这之后,一个链接器将预处理的最终输出/编译阶段所有C ++文件和组装的他们为一个最终输出文件。 预处理器(它处理的定义)的编译阶段之前的作品,而不是在链接期间。
的定义必须包括在每个模块中。
从技术上讲,它没有“范围”。 只有在编译之前出现这种情况文本替换操作。 你也可以看看你的编译器设置的方式来指定预处理器定义。 这通常是一个项目,通过你的IDE设置易得。
他们将需要包括定义,但是如果你需要跨你可以做一个编译器液位开关的所有文件定义。