C コードを C に統合することの影響
C と外部 C コードを扱う場合、それらの異なるコード間のギャップを埋める必要があります。コード構造。 C ヘッダーを C 内に統合すると、コンパイルとリンクの違いにより互換性の問題が発生します。この記事では、「extern "C"」を使用することでこれらの問題が解決される理由と方法について説明します。
C で "extern "C"{ #include
C と C コンパイラは表面的には似ていますが、生成されるコードは大きく異なります。 C コンパイラは、インクルードされたヘッダー ファイル内の C 構文を想定します。ただし、C ヘッダーが含まれている場合、コンパイラーはそれが C のデータ形式、特にアプリケーション バイナリ インターフェイス (ABI) に準拠していることを期待します。この相違によりリンカーが混乱するため、C データを C 関数に渡さないことが望ましいとされます。
コンパイラとリンカーの不一致について理解する
C の ABI は通常、関数とメソッド名。たとえば、プロトタイプに C 関数としてフラグを立てずに「printf()」関数を呼び出そうとすると、C コンパイラは「_Zprintf」を呼び出すコードを生成し、さらに複雑な問題が発生します。
「extern "C"」に関する問題
この非互換性を解決するには、「extern」を使用して C ヘッダーをインクルードする必要があります。 "C" {...}"。これにより、インクルードされたコードを C として解釈するようにコンパイラーに指示され、コンパイルされたコード形式間の一致が保証され、リンカー エラーが防止されます。一部のシステム C ヘッダーはすでに C コードへの組み込みの可能性を考慮し、「extern "C" を自動的に適用しますが、このディレクティブは未調整のヘッダーにとって重要です。
以上がC コードを C に統合するときに「extern 'C'{}」を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。