別の C ファイルでグローバル変数を使用する場合は、次のようにデータ型の前にアクセス指定子externを付ける必要があることを読みました。
File One File Two
int x, y; extern int x, y;
char ch; extern char ch;
int main(void) void func22(void)
{ {
/* ... */ x = y / 10;
} }
void func1(void) void func23(void)
{ {
x = 123; y = 10;
} }
誤ってファイル 2 で x、y をそのまま宣言していません。int x
それらをandとして宣言しint y
、コンパイラが変数xとyの再定義のエラーを表示するのを待ちますが、コードはエラーなしで実行されます。
例えば:
ファイルワン
#include <stdio.h>
int global = 1000; /** declare global variable called
global **/
int main(){
print();
return 0;
}
ファイル 2
int global; /** here I don't use the extern keyword **/
void print(void){
global = 100;
printf("\n global = %d",global);
return;
}
結果は次のとおりです。global = 100
プログラムはエラーなしでコンパイルおよびリンクされます
だから私の質問は次のとおりですextern
。指定子はここで冗長ですか?!