私はdbinfo.h vizの簡単な構造を持っています。私はリンクしようとすると、私はC言語の関数間でデータ値を共有する
#include "dbinfo.h"
extern dbinfo *tst_info;
int getnumflds() {
return tst_info.fields;
}
私がUtilities.cの中に未定義のシンボルを取得している他のファイルUtilities.cので
#include <string.h>
...
#include "dbinfo.h"
extern dbinfo *tst_info;
void main() {
tst_info = (dbinfo *) calloc(1, sizeof(dbinfo));
dbinfo.fields = 3;
printf("\n number of fields = %d"), getnumflds());
...
}
:私は、メインプログラムで
typedef struct {
int fields;
} dbinfo;
tst_info。 externを削除した場合、未解決のシンボルはありませんが、フィールドの値は0です。
ここで何が間違っていますか?
私は、別にコンパイルされた他の関数でmainに設定された 'fields'の値を使い、変更できるようにしたいだけです。
私はCを使用しており、これらのニューロンにアクセスするのに時間がかかりました。
正確に、もう少しを伝えるために。 Externは "変数はelsewereコンパイラで、私を信頼している"とだけ伝えます。しかし、実際には決して作成しないので、リンカーはそれを見つけられません。 ファイルの1つからexternを削除するだけです。 –
わかりません。メインプログラムでは、それをexternと指定して割り当てます。 –
メインプログラムからexternを削除し、サブルーチンの 'fields'を参照すると、メインプログラムで3に設定してもゼロになります。 –