static/extern 在源文件中有什么用?
What's the use of static/extern in source files?
对于编译多个文件时会发生什么,我有一个非常复杂的概念——主要是涉及到从一个文件到另一个文件的可见性。根据我的阅读,static
将变量或函数的范围限制为文件本身。 extern
则相反。由此我希望能够并且简单地从任何文件中读取 global extern。尽管如下所示,但这在实践中不起作用。
main.c:
#include <stdio.h>
int main(void){
printf("%d\n", b); // b is extern global
return 0;
}
a.c:
static int a = 40;
b.c:
extern int b = 20;
我连编译都不会:
> gcc main.c a.c b.c -o test
b.c:1:12: warning: ‘b’ initialized and declared ‘extern’ [enabled by default]
extern int b = 20;
^
main.c: In function ‘main’:
main.c:4:20: error: ‘b’ undeclared (first use in this function)
printf("%d\n", b); // b is extern global
如果声明或定义了变量,则可以使用该变量。
在main.c
中,没有b
的声明。您可以添加
extern int b;
in main.c
以便编译器能够使用 b
。这向编译器声明 b
在其他地方定义并且它是 int
.
类型
在b.c
中,您可以删除extern
这个词。除非符合static
,否则默认为extern
。
int b = 20;
即使在b.c
中,您也可以在文件顶部使用声明并在底部定义它。
extern int b;
//
// ... code that uses b
//
int b = 20;
extern
行只是声明了变量。最后一行定义变量。
当你有一个 extern
变量时,编译器知道这个变量的声明在这里,定义在别处。
所以你可以如下图做
some.h
extern int b; /* Declare the variable */
b.c
int b = 20; /* Define the variable */
main.c
#include<some.h>
int main()
{
printf("%d\n",b); /* Use the variable b */
return 0;
}
有了这个,文件 main.c 知道了 b
的声明,因为那里有 some.h
文件。
你正在做我们写的所有 wrong.When extern int b
这意味着一个名为 b
的整数类型变量已经 declared.And 我们可以根据需要多次声明. (记住,声明可以进行任意次)。通过外部变量,我们可以在程序的任何地方使用变量,前提是我们知道它们的声明并且变量在某处定义。
正确的做法是
main.c:
#include <stdio.h>
extern int b; //declaration of b
int main(void){
printf("%d\n", b); // using b
return 0;
}
b.c:
int b = 20; //definition here
并编译为 gcc main.c b.c -o test
我省略了 a.c,因为它在这个例子中什么也没做。
要了解有关外部人员的更多信息,请参阅此 site.Its 内容非常好 http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/
对于编译多个文件时会发生什么,我有一个非常复杂的概念——主要是涉及到从一个文件到另一个文件的可见性。根据我的阅读,static
将变量或函数的范围限制为文件本身。 extern
则相反。由此我希望能够并且简单地从任何文件中读取 global extern。尽管如下所示,但这在实践中不起作用。
main.c:
#include <stdio.h>
int main(void){
printf("%d\n", b); // b is extern global
return 0;
}
a.c:
static int a = 40;
b.c:
extern int b = 20;
我连编译都不会:
> gcc main.c a.c b.c -o test
b.c:1:12: warning: ‘b’ initialized and declared ‘extern’ [enabled by default]
extern int b = 20;
^
main.c: In function ‘main’:
main.c:4:20: error: ‘b’ undeclared (first use in this function)
printf("%d\n", b); // b is extern global
如果声明或定义了变量,则可以使用该变量。
在main.c
中,没有b
的声明。您可以添加
extern int b;
in main.c
以便编译器能够使用 b
。这向编译器声明 b
在其他地方定义并且它是 int
.
在b.c
中,您可以删除extern
这个词。除非符合static
,否则默认为extern
。
int b = 20;
即使在b.c
中,您也可以在文件顶部使用声明并在底部定义它。
extern int b;
//
// ... code that uses b
//
int b = 20;
extern
行只是声明了变量。最后一行定义变量。
当你有一个 extern
变量时,编译器知道这个变量的声明在这里,定义在别处。
所以你可以如下图做
some.h
extern int b; /* Declare the variable */
b.c
int b = 20; /* Define the variable */
main.c
#include<some.h>
int main()
{
printf("%d\n",b); /* Use the variable b */
return 0;
}
有了这个,文件 main.c 知道了 b
的声明,因为那里有 some.h
文件。
你正在做我们写的所有 wrong.When extern int b
这意味着一个名为 b
的整数类型变量已经 declared.And 我们可以根据需要多次声明. (记住,声明可以进行任意次)。通过外部变量,我们可以在程序的任何地方使用变量,前提是我们知道它们的声明并且变量在某处定义。
正确的做法是
main.c:
#include <stdio.h>
extern int b; //declaration of b
int main(void){
printf("%d\n", b); // using b
return 0;
}
b.c:
int b = 20; //definition here
并编译为 gcc main.c b.c -o test
我省略了 a.c,因为它在这个例子中什么也没做。 要了解有关外部人员的更多信息,请参阅此 site.Its 内容非常好 http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/