我正在尝试将局部变量(在func1中)传递给另一个文件中的函数(func2),但是func2要求将其作为全局变量。为了更好地解释问题,这里有两个文件:
file1.c中:
#include <something.h>
extern void func2();
void func1(){
int a=0;
func2();
}
file2.c中:
#include <something.h>
extern int a; //this will fail
void func2(){
printf("%d\n",a);
}
变量int a
不能在file1中声明为全局变量,因为func1是递归调用的。有一个更好的方法吗?
答案 0 :(得分:2)
在file1.c中:
#include <something.h>
#include "file1.h"
int a;
void func1(){
a = 0;
}
在file1.h
extern int a;
在file2.c中:
#include <something.h>
#include "file1.h"
void func2(){
printf("%d\n",a);
}
所以:
答案 1 :(得分:1)
抱歉,我无法对Ciro Pedrini的回答发表评论,所以我会说:按照他的说法做,但也是:
func1
(void)
的参数列表(并设置你的编译器抱怨空参数列表),因为()
只是意味着你没有指定参数是什么,在至少在C中,您的问题被标记为。void func1(void);
和a
file1.c中的#include file1.h
,因此编译器会检查a
和func1
的定义(在file1.c中)是否与其声明一致(在file1.h中)。 但是,尽管您可能必须将此作为练习,但请尽量避免在全局变量中传递信息:参数通常更可靠,因为更容易确保程序的其他部分不会改变它们。并且您谈到通过全局变量将信息传递给递归函数:在这种情况下,在递归调用改变值之前,您必须特别小心地在func1
中拾取并保存值。 - 通过论证更容易,更可靠!
答案 2 :(得分:0)
File1.c:
#include <something.h>
extern void func2_new(int b);
void func1(){
int a=0;
func2_new(a);
}
file2.c中:
#include <something.h>
int a;
void func2(){
printf("%d\n",a);
}
void func2_new(int b){
a=b;
func2();
}
正如许多人所指出的,唯一的答案是完全重构func2。我欢迎对此解决方案提供更多意见。