1

可能重复:
如何在不同的 .c 文件之间共享变量?

如果我有两个源文件和一个头文件: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 int i;

在标题和

int i = 10;

file1.c.

警告意味着对于 中的(不完整)声明i = 10;file1.c应用“隐式 int”规则,特别是,该行被解释为声明(因为赋值不能出现在函数范围之外)。

于 2012-10-29T14:03:48.770 回答
1

您的代码中有几个错误。首先是你在头文件中定义变量i,这意味着它将在所有包含头文件的源文件中定义。相反,您应该将变量声明extern

extern int i;

另一个问题是您不能只分配给 file1.c 中全局范围内的变量。相反,您应该在那里定义变量:

int i = 10;
于 2012-10-29T14:03:50.000 回答
1

在标题中声明extern(这意味着它的内存被保留在其他地方):

/* header.h */
extern int i;

然后只在一个文件中定义.c它,即实际为它保留内存:

/* file1.c */
int i = <initial value>;
于 2012-10-29T14:04:53.783 回答
0

在 99.9% 的情况下,在文件之间共享非常量的全局变量是糟糕的程序设计。您真正需要这样做的情况很少:它们非常罕见,以至于我无法提出任何有效的案例。可能是硬件寄存器的声明。

在大多数情况下,您应该使用(可能是内联的)setter/getter 函数(“public”)、文件范围内的静态变量(“private”)或不完整的类型实现(“private”)。

在极少数情况下,当您需要在文件之间共享变量时,请执行以下操作:

// 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. 在标题中使用

    外部国际我;

  2. file1.c或者file2.c

    诠释 i = 20;

  3. 如果您float只想更改intfloat

于 2012-10-29T14:05:57.020 回答