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

C 如何在一个文件中定义变量并在另一个文件中使用,c,linker,header-files,runtime-error,extern,C,Linker,Header Files,Runtime Error,Extern,这个问题可能很基本,但我没有得到任何线索 我有两个文件。。。 我要说的是我想做什么 文件1 ... j = data->alloc_len; ... 文件2 ... for(i=0;i<j;i++) ... file1.c #include "sample.h" int j=245; #include "sample.h" printf("%d",j); #include "file1.h" j = data->alloc_len #include "

这个问题可能很基本,但我没有得到任何线索

我有两个文件。。。 我要说的是我想做什么

文件1

...
j = data->alloc_len;
...
文件2

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

 #include "sample.h"
 int j=245;
  #include "sample.h"
  printf("%d",j);
#include "file1.h"
j = data->alloc_len
#include "file1.h"
if (j>0)
    ...
file2.c

 #include "sample.h"
 int j=245;
  #include "sample.h"
  printf("%d",j);
#include "file1.h"
j = data->alloc_len
#include "file1.h"
if (j>0)
    ...
但这是一个错误

我得到的错误是:

    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
*没有一个文件实际包含main函数*

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

简而言之,执行可以理解为存在一个
main.c
文件,该文件包含
main
,依次调用
file1.c
,并依次调用
file2.c

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

您可以将其放在头文件中:

extern int j;
并且只在file1.c中声明“real”
j
。如果file2.c包含该头,那么它可以使用变量
j

但是,对于全局变量,至少要使用描述性变量名a。你应该尽量避免全球性的,从长远来看,它们是一种负担,国际海事组织

(您可以考虑在 Fiel1.C./Case>中创建一个函数来返回该值。这有助于确保<代码> J <代码>在 Fiel1.C./C>中被控制,并且只在其他地方读取,限制理解“谁拥有”该变量的复杂性。

< P>您可以将其放入头文件:

extern int j;
并且只在file1.c中声明“real”
j
。如果file2.c包含该头,那么它可以使用变量
j

但是,对于全局变量,至少要使用描述性变量名a。你应该尽量避免全球性的,从长远来看,它们是一种负担,国际海事组织

(您可以考虑在 Fiel1.C./Case>中创建一个函数来返回该值。这有助于确保<代码> J <代码>在 Fiel1.C./C>中被控制,并且只在其他地方读取,限制理解“谁拥有”该变量的复杂性。

类似于

在c文件中定义变量,比如说file1.c

int j;

...

j = data->alloc_len;
文件1.h的标题将包含

extern int j;
包含在file2.c中的此标头

#include "file1.h"
但我建议使用更具描述性的变量名。

如下所示

在c文件中定义变量,比如说file1.c

int j;

...

j = data->alloc_len;
文件1.h的标题将包含

extern int j;
包含在file2.c中的此标头

#include "file1.h"
但我建议使用更具描述性的变量名。

#include“file1.c”
几乎从来都不是解决问题的正确方法。您希望在头文件中声明内容,然后在单个源文件中定义它们

file1.h

 extern int j;
extern int j;
file1.c

 #include "sample.h"
 int j=245;
  #include "sample.h"
  printf("%d",j);
#include "file1.h"
j = data->alloc_len
#include "file1.h"
if (j>0)
    ...
file2.c

 #include "sample.h"
 int j=245;
  #include "sample.h"
  printf("%d",j);
#include "file1.h"
j = data->alloc_len
#include "file1.h"
if (j>0)
    ...
说到这里,我强烈建议您将值作为参数传递,而不是使用全局状态。全球国家是邪恶的。像瘟疫一样避免它。

#包含“file1.c”
几乎从来都不是解决问题的正确方法。您希望在头文件中声明内容,然后在单个源文件中定义它们

file1.h

 extern int j;
extern int j;
file1.c

 #include "sample.h"
 int j=245;
  #include "sample.h"
  printf("%d",j);
#include "file1.h"
j = data->alloc_len
#include "file1.h"
if (j>0)
    ...
file2.c

 #include "sample.h"
 int j=245;
  #include "sample.h"
  printf("%d",j);
#include "file1.h"
j = data->alloc_len
#include "file1.h"
if (j>0)
    ...

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

你能用函数显示一些代码吗。。可能是在file1.c中,
intgetj(){return j;}
。刚刚看到您的编辑-您必须确保两个C文件都链接到库中在file1.h中给出错误
samp.h:1:1:error:function声明不是一个原型
编译的,而是同一个错误
未定义的符号getJ
。我非常困惑该怎么办请建议我或告诉我其他方法。您没有正确链接共享对象。在看不到编译/链接命令的情况下,无法判断您做错了什么。能否使用函数显示一些代码。。可能是在file1.c中,
intgetj(){return j;}
。刚刚看到您的编辑-您必须确保两个C文件都链接到库中在file1.h中给出错误
samp.h:1:1:error:function声明不是一个原型
编译的,而是同一个错误
未定义的符号getJ
。我非常困惑该怎么办请建议我或告诉我其他方法。您没有正确链接共享对象。在没有看到编译/链接命令的情况下,无法判断您做错了什么。