我在C文件中定义了一个变量:int x
,我知道如果我想在其他文件中使用它,我应该使用extern int x
在其他文件中声明它。
我的问题是:我应该在其他文件中将其声明在哪里?
在所有功能之外,
// in file a.c:
int x;
// in file b.c:
extern int x;
void foo() { printf("%d\n", x); }
将使用它的功能?
// in file b.c:
void foo() {
extern int x;
printf("%d\n", x);
}
我的怀疑是:
答案 0 :(得分:14)
两者都是正确的。
首选哪一个取决于变量的使用范围。
如果你只在一个函数中使用它,那么在函数中声明它。
void foo()
{
extern int x; <--only used in this function.
printf("%d",x);
}
如果它被文件中的多个函数使用,请将其声明为全局值。
extern int x; <-- used in more than one function in this file
void foo()
{
printf("in func1 :%d",x);
}
void foo1()
{
printf("in func2 :%d",x);
}
答案 1 :(得分:5)
假设你在函数中声明:
// in file b.c:
void foo() {
extern int x;
printf("%d\n", x);
}
void foo_2() {
printf("%d\n", x); <-- "can't use x here"
}
然后x
仅在函数foo()
内部可见,如果我有任何其他函数说foo_2()
,我无法访问x
内的foo_2()
。
如果你在所有函数之前声明x
,那么它将在完整文件(所有函数)中全局可见/可访问。
// in file b.c:
extern int x;
void foo() { printf("%d\n", x); }
void foo_2() { printf("%d\n", x); } <--"visible here too"
因此,如果您只需要单个函数中的x
,那么您可以在该函数内部声明,但如果x
在多个函数中使用,则在所有函数之外声明x
(您的第一个建议) 。
答案 2 :(得分:5)
你可以使用另一种方法来使用说明符extern声明变量。
// in file a.c:
int x;
// in file b.h // make a header file and put it in
// the same directory of your project and every
// time you want to declare this variable
// you can just INCLUDE this header file as shown in b.c
extern int x;
// in file b.c:
#include "b.h"
void foo() { printf("%d\n", x); }