iOS開発におけるstatic変数の3つの大きな役割について話します。
(1)まずその第一条を紹介することも一番重要なことです。隠します。
複数のファイルを同時にコンパイルする場合、staticプレフィックスを付加していないすべての大域変数と関数は大域的に視認性があります。この話を理解するために、例を挙げて説明します。二つのソースファイルを同時にコンパイルしたいです。一つはa.cで、もう一つはmail.cです。
以下はa.cの内容です。
Aハロー
なぜa.cで定義されているグローバル変数aと関数msgがmail.cで使用できますか?前に述べたように、staticプレフィックスを付加していないすべてのグローバル変数と関数は、グローバル視認性を持っています。他のソースファイルもアクセスできます。この例では、aはグローバル変数であり、msgは関数であり、staticプレフィックスは加えられていないので、別のソースファイルmail.cについては見られます。
staticを追加すると、他のソースファイルに隠します。例えばaとmsgの定義の前にstaticを加えると、main.cはそれらが見えなくなります。この特性を利用して、異なるファイルに同名の関数と同名の変数を定義できます。名前の衝突を心配する必要はありません。Staticは関数と変数のプレフィクスとして使用でき、関数としてはstaticの役割は非表示に限定され、変数に対してはstaticは次の2つの役割がある。
(2)staticの第二の役割は変数の内容の持続性を維持することである。静的データエリアに格納されている変数は、プログラムが起動した直後に初期化が完了します。唯一の初期化です。二つの変数が静的記憶領域に格納されています。グローバル変数とstatic変数は、大域変数と比べて、staticは変数の可視範囲を制御できます。つまり、staticは隠します。
このような使い方はあまり見られませんが、例を挙げます。
integer:0string:(begin)(end)
最後にstaticの三つの役割について一言でまとめます。まずstaticの最も主要な機能は非表示であり、次にstatic変数は静的記憶領域に保存されるので、耐久性とデフォルト値0を備えている。
以上のiOS開発におけるstatic変数の3つの大きな役割は、小編集が皆さんに提供する内容の全てです。参考にしていただければと思います。どうぞよろしくお願いします。
複数のファイルを同時にコンパイルする場合、staticプレフィックスを付加していないすべての大域変数と関数は大域的に視認性があります。この話を理解するために、例を挙げて説明します。二つのソースファイルを同時にコンパイルしたいです。一つはa.cで、もう一つはmail.cです。
以下はa.cの内容です。
char a = 'A'; // global variable
void msg()
{
printf("Hello
");
}
main.c
int main(void)
{
extern char a; // extern variable must be declared before use
printf("%c ", a);
(void)msg();
return 0;
}
プログラムの実行結果は:Aハロー
なぜa.cで定義されているグローバル変数aと関数msgがmail.cで使用できますか?前に述べたように、staticプレフィックスを付加していないすべてのグローバル変数と関数は、グローバル視認性を持っています。他のソースファイルもアクセスできます。この例では、aはグローバル変数であり、msgは関数であり、staticプレフィックスは加えられていないので、別のソースファイルmail.cについては見られます。
staticを追加すると、他のソースファイルに隠します。例えばaとmsgの定義の前にstaticを加えると、main.cはそれらが見えなくなります。この特性を利用して、異なるファイルに同名の関数と同名の変数を定義できます。名前の衝突を心配する必要はありません。Staticは関数と変数のプレフィクスとして使用でき、関数としてはstaticの役割は非表示に限定され、変数に対してはstaticは次の2つの役割がある。
(2)staticの第二の役割は変数の内容の持続性を維持することである。静的データエリアに格納されている変数は、プログラムが起動した直後に初期化が完了します。唯一の初期化です。二つの変数が静的記憶領域に格納されています。グローバル変数とstatic変数は、大域変数と比べて、staticは変数の可視範囲を制御できます。つまり、staticは隠します。
このような使い方はあまり見られませんが、例を挙げます。
#include <stdio.h>
int fun(void){
static int count = 10; //
return count--;
}
int count = 1;
int main(void)
{
printf("global\t\tlocal static
");
for(; count <= 10; ++count)
printf("%d\t\t%d
", count, fun());
return 0;
}
プログラムの実行結果は:
global local static
1 10
2 9
3 8
4 7
5 6
6 5
7 4
8 3
9 2
10 1
(3)staticの第3の役割は、デフォルトで0に初期化されます。実際にはグローバル変数も静的データエリアに格納されているので、この属性を備えています。静的データエリアでは、メモリ内のすべてのバイトのデフォルト値は0 x 00であり、この特徴は、プログラマの仕事量を減らすことができる場合があります。たとえば、まばらな行列を初期化して、すべての要素を1つずつ0にして、それから0ではないいくつかの要素を値付けします。静的に定義されているなら、0を最初に置く作業は省略されます。また、たとえば文字列として1つの文字列を使いますが、文字配列の末尾に'\0'を加えるのは面倒くさいと思います。文字列を静的に定義すれば、その手間を省きます。そこはもともと「0」です。小さい実験をして検証してもいいです。
#include <stdio.h>
int a;
int main(void)
{
int i;
static char str[10];
printf("integer: %d; string: (begin)%s(end)", a, str);
return 0;
}
プログラムの実行結果は以下の通りです。integer:0string:(begin)(end)
最後にstaticの三つの役割について一言でまとめます。まずstaticの最も主要な機能は非表示であり、次にstatic変数は静的記憶領域に保存されるので、耐久性とデフォルト値0を備えている。
以上のiOS開発におけるstatic変数の3つの大きな役割は、小編集が皆さんに提供する内容の全てです。参考にしていただければと思います。どうぞよろしくお願いします。