2

こんにちは、.c ファイル間でグローバル変数を共有する方法を考えています。
次のコードを追加しようとしましたが、それでもエラーが発生します。

test.c ファイル

#include <stdio.h>

int max = 50;
int main() 
{
  printf("max %d", max); // result max 50
}

pass.h

extern int max;

合格.c

#include <stdio.h>
#include "pass.h"

max;

int main()
{    
    printf("pass %d \n", max);

    return 0;
}

しかし、passed.c をコンパイルすると、次のエラーが発生します。

Undefined symbols for architecture x86_64:
"_max", referenced from:
  _main in passed-iOMugx.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

誰でも助けることができますか?どうもありがとう。

4

2 に答える 2

4

ヘッダー ファイルで変数を宣言できます。たとえば、declareGlobal.h-

//declareGlobal.h
extern int max; 

次に、たとえば test.c としましょう。変数が宣言されたヘッダー ファイルをインクルードすることを忘れないでください。たとえば、この場合は declareGlobal.c です。

//test.c
#include "declareGlobal.h"
int max = 50;

その後、この変数を任意のファイルで使用できます。宣言されているヘッダー ファイル (つまり、declareGlobal.c) をインクルードすることを忘れないでください。たとえば、passed.c で使用する場合は、次のようにします。

//passed.c
#include <stdio.h>
#include "declareGlobal.h"
#include "test.c"
int main()
{
printf("pass %d \n", max);
return 0;
}
于 2013-10-16T04:36:36.347 に答える
2

問題は、2 つのプログラムがあり、データ (変数など) を単にプログラム間で共有できないことです。

共有メモリやその他のプロセス間通信方法について読みたいと思うかもしれません。


一方、プログラムを1 つだけ使用し、別のファイルで定義された変数を使用する場合は、まだ間違っています。main1 つのプログラムに含めることができる関数は 1 つだけなのでmain、ソース ファイルの 1 つから関数を削除します。またpass.c、式でmax;は何もせず、必要ありません。

次に、コンパイル時に両方のファイルを渡します。

$ clang -Wall -g test.c pass.c -o my_program

上記のコマンドの後、(うまくいけば) という名前の実行可能プログラムが作成されmy_programます。

于 2013-10-16T04:25:43.100 に答える