文件之间的变量

时间:2012-10-29 14:00:04

标签: c

  

可能重复:
  How do I share variables between different .c files?

如果我有两个源文件和一个标题: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,我该怎么办?

5 个答案:

答案 0 :(得分:1)

成功

extern int i;
标题中的

int i = 10;
file1.c中的

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

答案 1 :(得分:1)

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

extern int i;

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

int i = 10;

答案 2 :(得分:1)

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

/* header.h */
extern int i;

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

/* file1.c */
int i = <initial value>;

答案 3 :(得分:0)

  1. 在标题中使用

    extern int i;

  2. file1.cfile2.c

    int i = 20;

  3. 如果您希望float只需将int更改为float

答案 4 :(得分:0)

在99.9%的情况下,在文件之间共享非常量全局变量是不好的程序设计。实际需要这样做的情况非常少:它们非常罕见,我无法提出任何有效案例。也许是硬件寄存器的声明。

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

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

// file.h
extern int my_var;

// file.c
#include "file.h"
int my_var = something;

// main.c
#include "file.h"
use(my_var);

永远不要在h文件中添加任何形式的变量定义。