いくつかのソースコードを分析していますが、というファイルが1つのファイル(.c)であり、別のファイルではありません。(これはflexで作成されたファイルのコードの1つで、 string.hのyyinを定義し、ERRNO.H、STDLIB.H、inttypes.h)):変数の宣言とそのextern宣言の両方が同じファイルに存在するとはどういう意味ですか?
extern FILE *yyin, *yyout;
FILE *yyin = (FILE*) 0, *yyout = (FILE *) 0;
私は基本的に、これらのステートメントが何を意味するか知っています。
しかし、externキーワードは、変数や関数などの定義を別のファイルに使用するために使用されます。 (それはそれのためのメモリを割り当てません。)
だから、私は何を意味しているコードをその:
FILE *yyin = (FILE*) 0, *yyout = (FILE *) 0;
はなく、同じファイル内に、別のファイルに表示しなければなりません。例えば
、
a.c
extern File *yyin; /* It means that a.c want to use yyin declared in b.c */
int main(void) {
yyin = *expressions*; /* yyin is variable in b.c */
return 0;
}
b.c
File *yyin = (FILE*) 0;
は、なぜ彼らは同じファイルに存在していますか?同じ名前を使用するexternキーワードと通常の変数宣言が同じファイルに存在する場合、特別な意味はありますか?
あなたが '#include'のしくみについて考えるならば、定義がある翻訳単位には通常、extern宣言があることに気付くでしょう –