選ぶ。
グローバルスコープ(つまり、関数の外部)にあるものはすべて、デフォルトで静的です。
例えば:
//main.c
int myVar; // global, and static
int main(void) {
...
return 0;
}
//morecode.c
extern int myVar; //other C files can see and use this global/static variable
ただし、グローバルスコープで何かを静的として明示的に宣言すると、静的であるだけでなく、そのファイル内でのみ表示されます。他のファイルはそれを見ることができません。
//main.c
static int myVar; // global, and static
int main(void) {
...
return 0;
}
//morecode.c
extern int myVar; // compiler error; "myVar" can only be seen by
// code in main.c since it was explicitly
// declared static at the global scope
また、デフォルトでは「外部」はありません。上記の例のように静的に明示的に宣言されていない場合は、通常、externを使用して他のファイルからグローバル変数にアクセスします。
constは、スコープに関係なく、データを変更できないことを意味するだけです。これは、外部または静的を意味するものではありません。何かが「externconst」または「extern」である可能性がありますが、「externstatic」は実際には意味がありません。
最後の例として、このコードはほとんどのコンパイラでビルドされますが、問題があります。myVarは、技術的に作成するファイルであっても、常に「extern」と宣言されます。悪い習慣:
//main.c
extern int myVar; // global, and static, but redundant, and might not work
// on some compilers; don't do this; at least one .C file
// should contain the line "int myVar" if you want it
// accessible by other files
int main(void) {
...
return 0;
}
//morecode.c
extern int myVar; //other C files can see and use this global/static variable
最後に、まだ慣れていない場合は、さまざまなレベルのスコープについてこの投稿を取り上げることをお勧めします。それはおそらくあなたにとって有益で有益なものになるでしょう。幸運を!
用語の定義-Cアプリケーションのスコープ
私の意見では、この私の質問にスコープで答えた人は良い仕事をしました。
また、関数内で静的なものを宣言した場合、値は関数呼び出しの間に残ります。
例えば:
int myFunc(int input) {
static int statInt = 5;
printf("Input:%d statInt:%d",input,statInt);
statInt++;
return statInt;
}
int main(void) {
myFunc(1);
myFunc(5);
myFunc(100);
return 0;
}
出力:
Input:1 statInt:0
Input:5 statInt:1
Input:100 statInt:2
関数内での静的変数の使用には、それらが役立つ特定の限られた数のケースがあり、通常、ほとんどのプロジェクトにとっては良い考えではないことに注意してください。