C++ コンパイラについて質問があります。
C++ コンパイラが共通シンボルを作成する正確なタイミングは? C コンパイラを使用すると、オブジェクト ファイルに共通のシンボルを提供できますが、C++ コンパイラ (GNU) を使用してまったく同じコードをコンパイルすると、定義済みシンボルと未定義シンボルしか得られません。
問題は、どのような状況で変数/関数が C++ で一般的にコンパイルされるのかということです。
C++ コンパイラについて質問があります。
C++ コンパイラが共通シンボルを作成する正確なタイミングは? C コンパイラを使用すると、オブジェクト ファイルに共通のシンボルを提供できますが、C++ コンパイラ (GNU) を使用してまったく同じコードをコンパイルすると、定義済みシンボルと未定義シンボルしか得られません。
問題は、どのような状況で変数/関数が C++ で一般的にコンパイルされるのかということです。
共通シンボルが存在する主な理由は、Fortranとその共通ブロックのためであり、したがって「共通シンボル」という名前が付けられています。一般的なシンボルの概念そのものはC++とは正反対であり、かなり厳密な1つの定義規則です。Cにも同様の規則がありますが、C標準では、同じ記号の複数の定義を許可することが言語の一般的な拡張であることも認識しています。C ++には、「一般的な拡張機能」の付録はありません。ベンダーが標準に準拠しているか、準拠していないかのどちらかです。
結論:C++コンパイラが共通のシンボルを生成する理由はありません。
それらのいくつかは決してしません。遅く、大いに嘆かわしい Watcom C++ コンパイラは、一般的なシンボルを大いに活用して、インライン関数インスタンスを節約しました。extern
このように経済的にも解決できるケースはいろいろあります。