既存の C コードベースを C コンパイラでコンパイルする場合、特にコンパイラを使用しない場合、いくつかの潜在的な問題が発生する可能性があります。 C ファイルを extern "C" ブロックでラップしないでください。
C では、C と比較してより厳格なデータ型ルールが適用されます。たとえば、列挙型の変数に整数を代入します。 C では許可されますが、 C では失敗します。このような場合、データを正しい型に明示的にキャストする必要があります。
C では、「class」、「bool」、「namespace」などの新しい予約語が導入されています。 、」は、C コンパイルされたコードでは変数名として使用できません。 C コードでこれらの単語を識別子として使用すると、コンパイル エラーが発生する可能性があります。
extern "C" ラッパーがない場合、C コンパイラはシンボルに名前のマングリングを適用します。 C ファイルに。これは、シンボルの先頭に追加の文字が付けられることを意味し、共有ライブラリの関数やデータにアクセスするために動的リンク (dlsym()) に依存している場合に問題が発生する可能性があります。
Beyondこれらの一般的な問題のほかに、コンパイル エラーを引き起こす可能性がある、C と C の間に発生する頻度は低い非互換性があります。これらには、プリプロセッサ マクロ、関数ポインタ、typedef の処理の違いが含まれる場合があります。
既知の非互換性の包括的なリストについては、「ISO C と ISO C 間の非互換性」ドキュメントを参照してください。これらの課題を慎重に検討し、C ファイルを extern "C" ブロックでラップするなどの適切な軽減戦略を採用することで、これらの問題のほとんどを軽減し、C コードベースを段階的に C に移行することができます。
以上が明確さと簡潔さを目指して、記事に基づいた質問ベースのタイトルをいくつか示します。 * C コンパイラを使用して C コードをコンパイルできますか?一般的な互換性問題の調査 * Y の場合に何が起こるかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。