>我有 2 个源文件 (.c) 名为 file1.c 和 file2.c,它们需要在它们之间共享一个变量,因此,如果在一个源文件中更新了变量,那么在另一个源文件中访问此变量时将看到更改。
我所做的是创建另一个名为File3.c的源文件和名为File3.h的头文件(当然,它包含在File1.c File2.c和File3.c中)
in file3.c:
int myvariable = 0;
void update(){//updating the variable
myvariable++;
}
int get(){//getting the variable
return myvariable;
}
in file3.h:
extern int myvariable;
void update(void);
int get(void);
in file1.c:
.
.
.
printf("myvariable = %d",get());//print 0
update();
printf("myvariable = %d",get());//print 1
.
.
.
in file2.c:
.
.
.
printf("myvariable = %d",get());//print 0 but should print 1
.
.
.
但问题是当 In file1.c
调用更新并更新 myvariable 时在file2.c
中看不到更改,因为在 file2.c 中调用 get 时,并且打印 myvariable,然后打印 0,只有在 file2.c 更新中调用时,才会看到更改。似乎该变量是共享的,但对于每个源文件,该变量都有不同的变量值/不同的内存
当您需要变量时,您可以在其他文件中将变量声明为 extern...
file1.c和file2.c中包含file3.h
我建议避免extern
变量,因为代码混乱 - 使用该全局在每个文件中重复extern。通常最好通过使其static
将全局变量绑定到某个文件范围。然后使用interface
函数访问它。在您的示例术语中,它将是:
// in file3.h
void update(int x);
int get(void);
// in file3.c:
static int myVariable = 0;
void update(int x){
myVariable = x;
}
int get(){
return myVariable;
}
// in other files - include file3.h and use
// update() / get() to access static variable
这只是一种可能的解决方案。这样做,变量不是整个应用程序的全局变量,只能使用访问函数读取/写入。如果您有任何疑问,请告诉我。
文件: access.c access.h file2.c main.c
编译方式:gcc main.c file2.c access.c -o test
运行: ./test
文件: 主.c
#include <stdio.h>
#include "access.h"
int main( int argc, char *argv[] )
{
int value;
put( 1 );
printf("%dn", get());
put( getValue() + 1 );
printf("%dn", getValue());
return(0);
}
文件: 访问.c
#include "access.h"
static int variable = 0;
int get( void )
{
return(variable);
}
void put( int i )
{
variable = i;
return;
}
文件: 文件2.c
#include <stdio.h>
#include "access.h"
int getValue( void )
{
int i = get();
printf("getValue:: %dn", i);
put(++i);
printf("after getValue:: %dn", get());
return( i );
}
文件: 访问.h
extern int getValue( void );
extern int get( void );
extern void put( int i );
这是运行输出:
[root@jrn SO]# ./test
1
getValue:: 1
after getValue:: 2
getValue:: 3
after getValue:: 4
4
我希望这有所帮助。