2012-05-02 7 views
0

C++コンパイラに関する質問があります。C++コンパイラ - 共通のシンボル

正確にC++コンパイラが共通シンボルを作成するのはいつですか? Cコンパイラでは、オブジェクトファイルに共通のシンボルを提供できますが、C++コンパイラ(GNU)で非常に同じコードをコンパイルすると、定義されたシンボルと定義されていないシンボルしか得られません。

したがって、どのような状況で変数/関数がC++で一般的にコンパイルされるのでしょうか?

答えて

1

それらのうちのいくつかは決してしません。後で嘆かわしいWatcom C++コンパイラは、インライン関数のインスタンスを節約するために一般的なシンボルを大いに活用しました。このように経済的に解決することができるexternのさまざまなケースがあります。

+0

ありがとうございました。私は、オブジェクトのシンボルの種類を要約しようとしている、と私は共通に準拠する例が必要なので、私はこの場合にそれを提供することはできませんね。 – cosinus

+0

@cosinusこの例は、インライン関数呼び出しです! – EJP

1

一般的なシンボルが存在する主な理由は、共通ブロックを持つFortranであり、したがって「共通シンボル」という名前が原因です。共通シンボルの概念はC++とは相反していますが、それはむしろ厳密な1つの定義ルールです。 Cにも同様の規則がありますが、C標準では、同じシンボルの複数の定義を許可することは、言語の一般的な拡張であることも認識しています。 C++には、「共通拡張」の付録はありません。ベンダーが規格に準拠しているか、規格に準拠していない。

ボトムライン:C++コンパイラが共通のシンボルを生成する理由はありません。

関連する問題