C の初心者の質問があります。別の C ファイルで共有されるグローバル変数を初期化する値を持つファイルを読み取る際に問題があります。私の真のプロジェクトには、複数のファイルで使用および変更する変数が多数あります。パラメータを読み取る私のファイルは次のとおりです。
#include <stdio.h>
#include <stdlib.h>
#include "parameters.h"
#include "prototypes.h"
#define MAX_LENGTH 100
int ReadParameters(void)
{
char line[MAX_LENGTH];
FILE *fp = fopen("parameters.in", "r");
if (! fp)
return EXIT_FAILURE;
int numread = 0;
while (fgets(line, MAX_LENGTH, fp)) {
numread += sscanf(line, "x = %d", &x);
numread += sscanf(line, "y = %d", &y);
numread += sscanf(line, "z = %d", &z);
}
fclose(fp);
return numread;
}
ヘッダー ファイルで変数 x、y、および z を外部として定義しました。
#ifndef PARAMETERS_H
#define PARAMETERS_H
extern int x;
extern int y;
extern int z;
#endif
ReadParameters.c のプロトタイプはヘッダーのプロトタイプ.h にあり、x、y、および z の値は main.c で使用されます。
#include <stdio.h>
#include <stdlib.h>
#include "parameters.h"
#include "prototypes.h"
int main()
{
ReadParameters();
printf("The value of x: %d\n", x);
printf("The value of y: %d\n", y);
printf("The value of z: %d\n", z);
x += 15;
y -= 5;
z -= 20;
printf("Now the value of x: %d\n", x);
printf("Now the value of y: %d\n", y);
printf("Now the value of z: %d\n", z);
return EXIT_SUCCESS;
}
コンパイルすると、x、y、および z への未定義の参照のエラーが発生します。これは、変数を定義していないことを宣言しただけだからだと思います。ヘッダー ファイルから extern を削除すると、エラーは発生せずに実行されますが、ヘッダー ファイルで変数を定義することはお勧めできません。別の .C ファイルを作成し、そこで変数を定義した場合:
#include "parameters.h"
int x, y, z;
それは動作しますが、これは大丈夫ですか?私はプログラミングが初めてで、何か提案をいただければ幸いです。ありがとう