C 如何在一个文件中定义变量并在另一个文件中使用
这个问题可能很基本,但我没有得到任何线索 我有两个文件。。。 我要说的是我想做什么 文件1C 如何在一个文件中定义变量并在另一个文件中使用,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 "
...
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。你应该尽量避免全球性的,从长远来看,它们是一种负担,国际海事组织
(您可以考虑在
extern int j;
并且只在file1.c中声明“real”j
。如果file2.c包含该头,那么它可以使用变量j
但是,对于全局变量,至少要使用描述性变量名a。你应该尽量避免全球性的,从长远来看,它们是一种负担,国际海事组织
(您可以考虑在
类似于
在c文件中定义变量,比如说file1.cint 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;}
文件1.h中的代码>。刚刚看到您的编辑-您必须确保两个C文件都链接到库中在file1.h中给出错误samp.h:1:1:error:function声明不是一个原型
编译的,而是同一个错误未定义的符号getJ
。我非常困惑该怎么办请建议我或告诉我其他方法。您没有正确链接共享对象。在看不到编译/链接命令的情况下,无法判断您做错了什么。能否使用函数显示一些代码。。可能是在file1.c中,intgetj(){return j;}
文件1.h中的代码>。刚刚看到您的编辑-您必须确保两个C文件都链接到库中在file1.h中给出错误samp.h:1:1:error:function声明不是一个原型
编译的,而是同一个错误未定义的符号getJ
。我非常困惑该怎么办请建议我或告诉我其他方法。您没有正确链接共享对象。在没有看到编译/链接命令的情况下,无法判断您做错了什么。