0

別のファイルから静的変数にアクセスするにはどうすればよいですか? 静的変数にはファイル スコープがありませんか?

bash-3.2$ ls
a.c  b.c

bash-3.2$ cat a.c
#include <stdio.h>
static int s = 100;
int fn()
{
/*  some code */
}

bash-3.2$ cat b.c
#include <stdio.h>
#include "a.c"
extern int s;
int main()
{
printf("s = %d \n",s);
return 0;
}

bash-3.2$ gcc b.c   

bash-3.2$ a.exe
s = 100 
4

2 に答える 2

6

あるファイルを別のファイルに含めました-非常に悪い習慣です。C コンパイラの観点からは、両方のファイルが 1 つの変換単位を形成します。これは、C プリプロセッサが の内容を に挿入するためa.cですb.c

2 つの別個の翻訳単位の場合、ある単位は別staticの翻訳単位にアクセスできませんが、あなたの場合はそうではありません。

行を削除#include "a.c"して、あるべきようにコンパイルすると:のエラーgcc a.c b.cが発生します。unresolved externals

于 2010-02-22T13:56:53.433 に答える
5

それは別のファイルからのものですが、あなたが印刷しているものは別の翻訳単位からのものではありません。#includea.cb.c

staticオブジェクトは、含まれるすべてのファイルで構成される翻訳単位に対してローカルであり、単一のソース ファイルに対してローカルではありません。

于 2010-02-22T13:55:50.053 に答える