静的部分は、ボーエンで再現:静的の役割を
静的には、その役割を要約したものを、組み込みCプログラミングで共通しています。
1、隠されました
複数のファイルをコンパイルする場合、すべてではない追加のプレフィックス静的グローバル変数と関数はグローバルな可視性を持っています
例:main.cのと交流をコンパイル中
1の#include <stdio.hの> 2 文字 A = ' A ' ; // グローバル変数 3。 ボイドMSG() 4。 { 5。 のprintf(" N-ハロー\ " ); 6 }
1の#include <stdio.hの> 2 3。 INT メイン() 4。 { 5。 EXTERN チャー A; // コンパイラ変数へのヒントは、他のモジュールで定義されてもよい 6。 のprintf(" %C \ N- " 、A)、 図7 (ボイド)MSG(); 8 リターン 0 ; 9 }
コンパイル
Linuxの@のlinux:〜/コード$ gccの交流のmain.c - Oこんにちは linuxの@のlinux:〜/コード$ ./ ハロー A こんにちは
なぜグローバル変数は、MSGでAC機能で定義され、main.cの中で使用することができますか?すべてではないプレフィックスのプラスmain.cの他のソースファイルがアクセスできるような静的グローバル変数と関数は、グローバルな可視性を持っているので。
静的を追加しました、それは他のソースファイルから非表示になります。メッセージの例は、静的に追加する前に、main.cのは、それらを見つけることができません。
Linuxの@のlinux:〜/コード$ gccの交流のmain.c - ハローO /tmp/ccfqGr8L.o:関数`メインに' : 。main.cの:(テキスト+ から0xC):`未定義の参照' main.cの:( .text + 0x24を): `MSGに未定義の参照「 エラー:collect2はldは返さ1つの終了ステータスを
この静的と同じ名前のプロパティは、名前の競合を気にせずに、別のファイルに同じ名前の関数や変数を定義することができます。静的関数と変数だけ隠れ静的の役割の面で機能するために、接頭辞として使用することができ、および変数のため、次の2つの関数だけでなく、静的。
1)永続的な変数の内容を維持するために、可変領域に格納された静的データは、実行中のプログラムの開始時に初期化を完了され、ある時間だけ初期化、 (静的ローカル変数のみが自動的に解除されます変更したときのプログラムの全体の終わり。次の呼び出しのローカル変数の関数ならば、それは再声明を必要とせず、最初の呼び出し預金に値を保持します。)
プログラム例:1-5階乗シーク:に由来するコードは:静的静的変数を理解します
6つの#が含まに<stdio.h> 7 8 長い因子(INT n)の 9 { 10 静的 長い INT F = 1。// 静的 11 F * = N。 12 リターンF。 13 } 14 15 ボイドメイン(ボイド) 16 { 17 INT I。 18 のためには、式(I = 1 ; I <= 5 ; I ++ ) 19 のprintf(" %LD \ nは「因子(I)); 20 }
結果:
Linuxの@のlinux:〜/コード$ ./a。アウト 1 2 6 24 120
由于f为静态变量,能在每次调用后保留其值并在下一次调用时继续使用,所以输出值成为累加的结果。若变量f说明为自动变量(去掉static),当main中多次调用factor时,f均赋初
値は、すべてのF = 1 * n個出力されるので、1です
Linuxの@のlinux:〜/コード$ ./a。アウト 1 2 3 4 5
静的変数は0にデフォルトで初期化され、初期化されません2)
第三の役割はに初期化され、デフォルトの静的である0。グローバル変数は静的データ領域に格納されているため、実際には、グローバル変数も、この特性を持っています。静的データ領域では、全てのメモリにデフォルト値であるバイト時々この機能は、プログラマの負担を軽減することができ、$ 00。
最後に、3つの静的役割は、一つの文の要約を行います。まず、静的主な機能は、にある非表示、そして第二にので、それは持っているので、静的変数は、スタティックメモリに保存されている持続性とデフォルト値0を。