带有外部“C”的g++真的提供了与gcc相同的环境吗? 我用C语言编写了其他程序包,有些代码用C++语言编写。所以我的代码,需要与C例程和C++类一起工作。我的计划是,使用externC{}方法在C中包含所有头文件,并使用g++进行编译。 因此,我将C中的所有页眉复制到一个目录中,并添加页眉和页脚,如 #ifdef __cplusplus extern "C" { #endif //... #ifdef __cplusplus } #endif

带有外部“C”的g++真的提供了与gcc相同的环境吗? 我用C语言编写了其他程序包,有些代码用C++语言编写。所以我的代码,需要与C例程和C++类一起工作。我的计划是,使用externC{}方法在C中包含所有头文件,并使用g++进行编译。 因此,我将C中的所有页眉复制到一个目录中,并添加页眉和页脚,如 #ifdef __cplusplus extern "C" { #endif //... #ifdef __cplusplus } #endif,gcc,g++,extern,Gcc,G++,Extern,但是,它仍然没有编译。所以我制作了一个模拟C程序,让它看起来很清楚问题是如何出现的 main.C A.h 它在编译模拟程序时给出的错误消息与我正在编写的实际代码编译时的错误消息相同。这是关于在B.h和C.h中定义的一些预处理器宏函数,但我想向您保证,所有这些头文件都是在extern C{}中编写的。模拟程序是用C语言编写的,所以我可以用gcc检查是否有错误消息,而且效果很好。 所以我想知道的是,带有extern C的g++是否和gcc一样工作?还是我错过了什么?有什么建议可以解决这个问题吗? <

但是,它仍然没有编译。所以我制作了一个模拟C程序,让它看起来很清楚问题是如何出现的

main.C A.h 它在编译模拟程序时给出的错误消息与我正在编写的实际代码编译时的错误消息相同。这是关于在B.h和C.h中定义的一些预处理器宏函数,但我想向您保证,所有这些头文件都是在extern C{}中编写的。模拟程序是用C语言编写的,所以我可以用gcc检查是否有错误消息,而且效果很好。
所以我想知道的是,带有extern C的g++是否和gcc一样工作?还是我错过了什么?有什么建议可以解决这个问题吗?

< P>外部C不将C++编译器转换成C编译器。代码仍然必须是有效的C++代码。它不能使用新关键字作为标识符,也没有从void*到其他指针类型的隐式转换,等等。extern C基本上只影响链接,即代码如何与其他翻译单元交互。它不会更改编译器接受的源语言。

如果不看到产生错误的代码,很难判断。C代码通常可以由C++编译器编译,但也有一些例外。
#include <stdio.h>
#include <A.h> //This is the problematic header file.
int main()
{
  struct MMM m; //some struct in A.h
  printf("How many times do I have to compile this? %d\n",1000);
  return 0;
}
#ifndef _A_H
#define _A_H

#ifndef ...
#define ... ...
#endif

#include <B.h>
#include <C.h> 
#endif