【问题标题】:C/C++ compiling different parts of the program with different compilersC/C++ 用不同的编译器编译程序的不同部分
【发布时间】:2013-05-16 12:07:21
【问题描述】:

我正在用 C++ 编写一个程序,它需要调用一个用开源 C 程序编写的子例程。 C 文件称为 shd.c。 (程序中没有 shd 的头文件)。 C 程序本身使用 gcc 编译器可以很好地编译,而 C++ 程序在使用 g++ 编译时可以正常工作,而无需引用 C 文件。

但是,g++ 非常不喜欢 C 程序,当我使用 g++ 自己编译 shd 时会出现数百个错误和警告,并且当我包含 C 文件时编译 C++ 程序时也会遇到同样的问题。

到目前为止,我包含 C 文件的方式如下所示:

extern "C"{
#include "shd"
}

无论如何,我认为我在这里唯一的选择(如果我错了,请纠正我)是使用不同的编译器分别编译 C 和 C++ 文件。有没有办法做到这一点?我还要指出我正在使用 NetBeans,如果这有什么不同的话。

【问题讨论】:

  • make 这样的构建工具可以为不同的语言调用不同的编译器。
  • 使用 g++ 编译 C 代码时会收到什么样的错误消息?

标签: c gcc netbeans c++11 g++


【解决方案1】:

您可以将gcc 用于shd.cg++ 用于c++ 文件。但是 C++ 函数名称有一个名称修饰,因此您不能直接从 C++ 调用(按名称)C 函数或从 C 代码调用 C++ 函数。为了能够调用它们,您应该使用extern "C" 声明要调用的函数。

有一种经典的做法:创建带有声明的shd.h C/C++ 文件:

#ifdef __cplusplus 
 extern "C" {
#endif

extern int shd_a(int, int);
extern int shd_b(int, int);
...

#ifdef __cplusplus 
 }
#endif

并将其包含在 shd.c 和 c++ 文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2011-03-04
    • 2021-12-10
    • 1970-01-01
    • 2011-07-24
    • 2020-10-18
    相关资源
    最近更新 更多