2012-10-31 11 views

答えて

28

スタティックは変数のスコープを同じに制限しますtranslation unitです。
固定グローバル変数は内部リンクです。
固定グローバル変数は外部リンクです。

グッド読む:
What is external linkage and internal linkage?

+0

静的でないグローバルに外部リンケージがある場合、 'extern'の使用は何ですか? – rubenvb

+0

@rubenvb:あなたのQへの答えは、インラインで答えるためのリンクで詳しく説明されています。 –

+2

@rubenvb 'extern'は、それが宣言であり、関数のプロトタイプのように定義ではないことを意味します。 –

7

グローバルstatic変数は、変数がである翻訳単位(すなわち、ソースファイル)でのみ使用可能です非静的グローバル変数が他から参照することができます。ソースファイル。あなたは違いが何であるかわからない場合は、静的なグローバル変数がない

+3

より具体的には、 'static'を使うとリンカがその翻訳単位からシンボルをエクスポートするのを防ぎます。 – cdhowie

1

グローバル非静的変数は、他のファイルからアクセス可能です、正しい答えはおそらくさらに混乱あなたになります。要するに、クラスのstaticは、ファイルスコープで静的には解釈されません。クラスの統計は本質的に通常の変数と同じですが、クラス名の前にプレースメントすることで参照する必要があります。ファイルスコープのStaticsは、ファイルに対してのみローカルな通常の変数です。その意味を理解するには、同じ名前の2つの変数を1つのプロジェクトに追加してみてください。同じシンボルが複数あるため、リンカーエラーが発生します。シンボルを静的にすることで、その問題を避けることができ、変数の名前はファイルの外部からアクセスできなくなります。

+1

もちろん、ポインタを介して「アクセス可能」です。それらは単に「他の翻訳単位のスコープから名前で参照することはできません」(§3.5)。 – dyp

+1

@DyP Rahulは変数がその名前でアクセスできないことを意味することは明らかです。 – Pavel

3

あるのに対し、

関連する問題