1

重複の可能性:
異なる.cファイル間で変数を共有するにはどうすればよいですか?

2つのソースファイルと1つのヘッダーがある場合:file1.c、file2.c、header.h、および:

--header.h--

int i;

--file1.c--

#include <header.h>
i = 10;

int main() {
func();
return 0;
}

--file2.c--

#include <header.h>

void func() {
printf("i = %d\n", i);
return;
}

iデフォルトで。になっている警告が表示されintます。たとえば 、私が持っiていたい場合はどうすればよいですか?float

4

5 に答える 5

1

externヘッダーのように宣言します (これは、別の場所でメモリが予約されていることを意味します):

/* header.h */
extern int i;

次に、それを 1 つのファイルだけで定義.cします。つまり、実際にメモリを予約します。

/* file1.c */
int i = <initial value>;
于 2012-10-29T14:04:53.783 に答える
1

成功する

extern int i;

ヘッダーと

int i = 10;

file1.c

この警告は、 の (不完全な) 宣言i = 10;に対してfile1.c、"implicit int" 規則が適用されることを意味します。特に、その行は宣言として解釈されます (代入は関数スコープの外に現れることができないため)。

于 2012-10-29T14:03:48.770 に答える
1

コードにいくつかのエラーがあります。1 つ目は、ヘッダー ファイルで変数を定義するiことです。つまり、ヘッダーを含むすべてのソース ファイルで変数が定義されます。代わりに、変数を次のように宣言する必要があります。extern

extern int i;

もう 1 つの問題は、file1.c のグローバル スコープ内の変数に割り当てることができないことです。代わりに、変数を定義する必要があります。

int i = 10;
于 2012-10-29T14:03:50.000 に答える
0

すべてのケースの 99.9% で、ファイル間で非定数のグローバル変数を共有するのはプログラムの設計として不適切です。実際にこれを行う必要がある場合はほとんどありません。非常にまれであるため、有効なケースを見つけることができません。おそらくハードウェアレジスタの宣言。

ほとんどの場合、代わりに (おそらくインライン化された) セッター/ゲッター関数 (「パブリック」)、ファイル スコープの静的変数 (「プライベート」)、または不完全な型の実装 (「プライベート」) を使用する必要があります。

ファイル間で変数を共有する必要があるまれなケースでは、次のようにします。

// file.h
extern int my_var;

// file.c
#include "file.h"
int my_var = something;

// main.c
#include "file.h"
use(my_var);

h-ファイルには、いかなる形式の変数定義も入れないでください。

于 2012-10-29T14:08:26.270 に答える
0
  1. ヘッダーの使用で

    extern int i;

  2. どちらかfile1.cまたはfile2.c持っている

    int i = 20;

  3. あなたfloatだけに変更intしたい場合float

于 2012-10-29T14:05:57.020 に答える