我在 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 的原型在头文件prototype.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;
它有效,但这可以吗?我是编程新手,任何建议都将不胜感激。谢谢