2

问题

GCC、MSVC 或 Clang 或某些组合是否支持将链接设置为默认为 C?

背景

我有一个大型混合 C/C++ 项目,虽然使用 C 链接导出 C++ 源中的符号很容易且合乎逻辑,但这些相同的源假设项目其余部分中的东西在 C++ 链接下。

目前的情况要求我明确地包装 C 源代码中定义的 C 源代码使用的任何内容,以及 C++ 源代码使用的 C 源代码中的所有内容extern "C++"

最重要的是,我不能放置extern "C"整个源文件或头文件,因为实际的 C++ 内容会抱怨。(例如#include <memory>我定义的 from 或 templates。)

4

2 回答 2

7

头文件中的标准模式是:

#ifdef __cplusplus

// C++ stuff

extern "C" {
#endif

// C/C++ stuff

#ifdef __cplusplus
}
#endif

我不确定你还有其他选择。C/C++ 的东西必须在任何地方用 C 链接声明。C++ 特定的东西必须在任何地方用 C++ 链接声明。

于 2010-10-05T13:55:10.273 回答
1

默认情况下,“C”链接仅对 C 源代码有意义,对 C++ 源代码无效,反之亦然。“C”链接通常意味着名称/符号不会被破坏。“C”链接的表现力不足以用于 C++ 源代码,例如重载函数。

于 2010-10-06T09:32:28.213 回答