2

質問

GCC、MSVC、Clang、またはいくつかの組み合わせは、リンケージをデフォルトのCに設定することをサポートしていますか?

バックグラウンド

私は大規模な混合C/C ++プロジェクトを持っており、Cリンケージを使用してC ++ソースでシンボルをエクスポートするのは簡単で論理的ですが、これらの同じソースは、プロジェクトの残りの部分がC++リンケージの下にあると想定しています。

現在の状況では、C ++ソースで定義されているCソースが使用するものすべてと、C++ソースがCソースから使用するすべてのものを明示的にラップする必要がありますextern "C++"

extern "C"最後に、実際のC ++のものが文句を言うので、ソースファイルまたはヘッダーファイル全体を配置することはできません。#include <memory>(私が定義したfromやテンプレートなど。)

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 に答える