我有一个关于C和C++中的预处理器指令的问题。
我有以下代码:
#ifdef __cplusplus
//part A
extern "C"
{
// somecode here
}
#else
//part B
#endif
我知道c++编译器预先定义了c编译器不会使用的CPluplus。
我将这组代码放入一个c头文件,c++文件将包含这个c头文件。我的问题是:如果文件是由C++编译器编译的,它将编译A部分,如果它是由C编译器编译的,它将编译B部分,但是通常,我们使用这个代码使C++文件和C文件相互作用,如果我们有这样的代码,我的意思是我们同时有C和C++文件,并且我们使用GCC编译器,这是如何实现的?代码已编译?只编了A部分?或者只有B部分被编译?或者代码分为两部分,A部分为C++编译,B部分同时编译为C文件?
最佳答案
在具有多个源文件的项目中,编译器不会仅处理一次头。
当编译器编译一个C++文件时,它读取该文件及其包含的任何标题(直接或间接),并使用C++规则处理这些文件的内容。
编译器编译C文件时,会读取该文件及其包含的任何头文件(直接或间接),并使用C的规则处理这些文件的内容。
结果就好像你的头文件中的代码分别出现在C++源和C源中。
关于c++ - 关于C和C++之间通用 header 的预处理器防护,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13711249/