如何在一个文件中定义变量并在另一个文件中使用它

时间:2011-10-15 11:40:55

标签: c linker header-files runtime-error extern

问题可能非常基本,但我无论如何都没有得到线索......

我有两个档案...... 我提到了我想做的事。

档案1

...
j = data->alloc_len;
...

文件2

...
  for(i=0;i<j;i++)
...

从上面可以看出,我想在一个文件中为一个变量赋值,并希望在其他文件中使用该值。

我在file2.c中尝试了#include "file1.c",但它提供了很多重新声明错误。

我尝试创建一个单独的头文件,只有一行int j,然后使用extern将其包含在两个文件中,但没有任何好处。虽然我认为头文件适用于我可以创建的地方并为一个文件中的变量赋值,然后通过包含这个值将该值传播到所有其他文件。

可能我错了,但我很快就需要它,所以请帮助我... Thnx提前。

限制 -

该值只能通过file1.c分配,因为data结构仅在此处声明和定义。我无法在头文件中为variable j提供值。

编辑:

虽然我提到但我认为我无法解决我的问题。我尝试过使用它的头文件。

出于调试目的,我尝试了这个..

sample.h

 extern int j;

file1.c中

 #include "sample.h"
 int j=245;

file2.c中

  #include "sample.h"
  printf("%d",j);

但它的错误。

我得到的错误是:

    Couldn't open module sample.so, tried:
sample.so: cannot open shared object file: No such file or directory
./sample.so.so: cannot open shared object file: No such file or directory
/usr/local/lib/sendip/sample.so.so: 
    cannot open shared object file: No such file or     
    directory
/usr/local/lib/sendip/sample.so: undefined symbol: j

* 实际上没有任何文件包含主要功能*

实际上这是一个非常大的项目,我正在使用Makefile,所有文件都会在运行时链接。

简而言之,执行可以被理解为有一个main.c文件,其中包含main,后者又调用file1.c,然后调用file2.c

关于描述性名称我会说它们只是用于显示,否则我已经在使用描述性名称。

3 个答案:

答案 0 :(得分:2)

可以把它放在一个头文件中:

extern int j;

并且只在file1.c中声明“真实”j。如果file2.c包含该标头,则它可以使用变量j

但是,使用描述性变量名称至少对于全局变量。你应该尽可能地避免使用全局变量,从长远来看,它们是一种负担,IMO。

(您可以考虑在file1.c中创建一个返回该值的函数。这样做的好处是可以确保j中的file1.c被控制,并且只能在其他地方读取,限制理解谁“拥有”该变量的复杂性。)

答案 1 :(得分:0)

像这样

在c文件中定义变量say file1.c你写

int j;

...

j = data->alloc_len;

你的file1.h的标题将包含

extern int j;

你在file2.c中包含的这个标题

#include "file1.h"

但我建议使用更具描述性的变量名称。

答案 2 :(得分:0)

#include "file1.c"几乎不是解决问题的正确方法。不变,你想在头文件中声明事物,然后在一个源文件中定义它们。

<强> file1.h

extern int j;

<强> file1.c中

#include "file1.h"
j = data->alloc_len

<强> file2.c中

#include "file1.h"
if (j>0)
    ...

说完所有这些后,我强烈建议您将值作为参数传递,而不是使用全局状态。全球国家是邪恶的。避免像瘟疫一样。