実行可能ファイルは実行可能ファイルであり、言語に関係なく実行可能ファイルです。ターゲット アーキテクチャ用にビルドされている場合は、そのアーキテクチャで実行されます。
C と C++ でコンパイルされたコードの (おそらく) 最も重要な違い、および C と C++ の両方の実行可能ファイルに対してリンクできるライブラリに関連する違いは、名前マングリングです。 基本的に: ライブラリがコンパイルされると、ライブラリに対してリンクされた実行可能ファイルが使用できる一連のシンボル (関数名、エクスポートされた変数など) がエクスポートされます。これらのシンボルの命名方法かなりコンパイラ/リンカー固有であり、後続の実行可能ファイルが互換性のない規則を使用するリンカーを使用してリンクされている場合、シンボルは正しく解決されません。さらに、C と C++ では規則が少し異なります。上にリンクされているウィキペディアの記事には、詳細が記載されています。ヘッダーファイルでエクスポートされたシンボルを宣言するとき、通常、次のような構造が表示されます。
#ifdef __cplusplus
extern "C" {
#endif
/* exported declarations here */
#ifdef __cplusplus
}
#endif
__cplusplus
C++ コードのコンパイル時にのみ定義されるプリプロセッサ マクロです。ここでの考え方は、C++ でヘッダーを使用する場合、エクスポートされたシンボルの名前付けに C の方法を使用するようにコンパイラーに指示することです (" extern "C" { /* foo */ }
" ブロック内で、ライブラリを C と C++ の両方で正しくリンクできます。