2017-04-19 6 views
9

Storage-class specifiersから:保管期間と連動:2つの独立したプロパティを決定するためにストレージクラス指定子が使用されるのはなぜですか?

ストレージクラス指定子は、それらが宣言名の二つの独立した特性を決定します。

たとえば、staticというキーワードがグローバル変数と関数(いずれにしてもストレージクラスは静的です)に使用されている場合、そのリンケージはInternal-linkageに設定されます。関数内の変数(リンケージなし)で使用すると、ストレージクラスがstaticに設定されます。

私の質問です:なぜ同じ指定子が両方のものに使用されていますか?

+0

おそらく、独立した2つの特性を個別に使用する必要はほとんどないためです。最後に、なぜCがこのように行われたのかを尋ねています。 - 私は単純さと思われ、それは時間の芸術にマッチしました。 – chux

+0

@chux、あなたは詳しく説明できますか?私はなぜ「2つの独立した財産を単独で使う必要はほとんどない」と理解していません。私は静的記憶と内部リンケージとの関係を理解し​​ておらず、なぜ2つが緊密に結ばれているのか理解していません。 –

+0

以下の回答で十分です。 – chux

答えて

8

理由は主に歴史的です。リンケージは、後の考察としてC言語の設計に入ったのです。あなたが望むように初期のバージョンでは、何回としてグローバル変数を再宣言でき、リンカはあなたのためにすべてのこれらの宣言をマージします:

リッチーの本来の意図は理論その上で、FORTRAN COMMON宣言にCのルールをモデル化していましたFORTRANを扱うことができる任意のマシンは、Cの準備ができています。共通ブロックモデルでは、パブリック変数は複数回宣言されます。同じ宣言がリンカーによってマージされます。 (source

単一の宣言の現在のルールは、externキーワードと共に後で来ました。この時点では、下位互換性を重視するために重要なCコードの本体がありました。これはおそらく、言語設計者がリンクを処理するための新しいキーワードを導入することを控え、代わりにstaticを再利用する理由です。

+2

ああ、 'COMMON'ステートメント - shuddder。 – chux

関連する問題