C:在文件之间传递变量
我试图将局部变量(在func1中)传递给另一个文件中的函数(func2),但func2要求将其作为全局变量。为了更好地解释,以下是两个文件: 文件1.c:C:在文件之间传递变量,c,scope,global,C,Scope,Global,我试图将局部变量(在func1中)传递给另一个文件中的函数(func2),但func2要求将其作为全局变量。为了更好地解释,以下是两个文件: 文件1.c: #include <something.h> extern void func2(); void func1(){ int a=0; func2(); } #包括 extern void func2(); void func1(){ int a=0; func2(); } 文件2.c: #include <
#include <something.h>
extern void func2();
void func1(){
int a=0;
func2();
}
#包括
extern void func2();
void func1(){
int a=0;
func2();
}
文件2.c:
#include <something.h>
extern int a; //this will fail
void func2(){
printf("%d\n",a);
}
#包括
外部内部a//这将失败
void func2(){
printf(“%d\n”,a);
}
变量int a
不能在file1中声明为全局变量,因为func1是递归调用的。有更好的方法吗 在文件1.c中:
#include <something.h>
#include "file1.h"
int a;
void func1(){
a = 0;
}
在文件2.c中:
#include <something.h>
#include "file1.h"
void func2(){
printf("%d\n",a);
}
#包括
#包括“file1.h”
void func2(){
printf(“%d\n”,a);
}
因此:
- 变量位于file1.c中
- h允许其他人知道它存在并且它的类型是int
- c包含file1.h,以便编译器在file2.c尝试使用它之前知道var a的存在
- 在文件1.c中:
#include <something.h>
#include "file1.h"
int a;
void func1(){
a = 0;
}
在文件2.c中:
#include <something.h>
#include "file1.h"
void func2(){
printf("%d\n",a);
}
#包括
#包括“file1.h”
void func2(){
printf(“%d\n”,a);
}
因此:
- 变量位于file1.c中
- h允许其他人知道它存在并且它的类型是int
- c包含file1.h,以便编译器在file2.c尝试使用它之前知道var a的存在
- 在文件1.c中:
#include <something.h>
#include "file1.h"
int a;
void func1(){
a = 0;
}
在文件2.c中:
#include <something.h>
#include "file1.h"
void func2(){
printf("%d\n",a);
}
#包括
#包括“file1.h”
void func2(){
printf(“%d\n”,a);
}
因此:
- 变量位于file1.c中
- h允许其他人知道它存在并且它的类型是int
- c包含file1.h,以便编译器在file2.c尝试使用它之前知道var a的存在
- 在文件1.c中:
#include <something.h>
#include "file1.h"
int a;
void func1(){
a = 0;
}
在文件2.c中:
#include <something.h>
#include "file1.h"
void func2(){
printf("%d\n",a);
}
#包括
#包括“file1.h”
void func2(){
printf(“%d\n”,a);
}
因此:
- 变量位于file1.c中
- h允许其他人知道它存在并且它的类型是int
- c包含file1.h,以便编译器在file2.c尝试使用它之前知道var a的存在
- 显式地创建
的参数列表func1
(并将编译器设置为抱怨参数列表为空),因为(void)
只意味着您没有指定问题标记为的参数,至少在C中是这样()
- 声明
以及文件1.h中的void func1(void)
a
,因此编译器检查#在file1.c中包含file1.h
和a
的定义(在file1.c中)是否与其声明(在file1.h中)一致func1
但是,尽管您可能不得不这样做作为练习,但尽量避免在全局变量中传递信息:参数通常更可靠,因为更容易确保程序的其他部分不会改变它们。您还谈到通过全局变量将信息传递给递归函数:在这种情况下,在递归调用改变值之前,您必须特别小心地在
func1
中拾取并保存值-传递参数是如此的简单和可靠 对不起,我不能对西罗·佩德里尼的回答发表评论,所以我要说:照他说的去做,但也要:
- 显式地创建
的参数列表func1
(并将编译器设置为抱怨参数列表为空),因为(void)
只意味着您没有指定问题标记为的参数,至少在C中是这样()
- 声明
以及文件1.h中的void func1(void)
a
,因此编译器检查#在file1.c中包含file1.h
和a
的定义(在file1.c中)是否与其声明(在file1.h中)一致func1
但是,尽管您可能不得不这样做作为练习,但尽量避免在全局变量中传递信息:参数通常更可靠,因为更容易确保程序的其他部分不会改变它们。您还谈到通过全局变量将信息传递给递归函数:在这种情况下,在递归调用改变值之前,您必须特别小心地在
func1
中拾取并保存值-传递参数是如此的简单和可靠 对不起,我不能对西罗·佩德里尼的回答发表评论,所以我要说:照他说的去做,但也要:
- 显式地创建
的参数列表func1
(并将编译器设置为抱怨参数列表为空),因为(void)
只意味着您没有指定问题标记为的参数,至少在C中是这样()
- 声明
以及文件1.h中的void func1(void)
a
,因此编译器检查#在file1.c中包含file1.h
和a
的定义(在file1.c中)是否与其声明(在file1.h中)一致func1
但是,尽管您可能不得不这样做作为练习,但尽量避免在全局变量中传递信息:参数通常更可靠,因为更容易确保程序的其他部分不会改变它们。您还谈到通过全局变量将信息传递给递归函数:在这种情况下,在递归调用改变值之前,您必须特别小心地在
func1
中拾取并保存值-传递参数是如此的简单和可靠 对不起,我不能对西罗·佩德里尼的回答发表评论,所以我要说:照他说的去做,但也要:
- 显式地创建
的参数列表func1
(并将编译器设置为抱怨参数列表为空),因为(void)
只意味着您没有指定问题标记为的参数,至少在C中是这样。()