我想知道在c ++中使用“extern”语句是什么,以及何时/为什么使用它?。
感谢。
答案 0 :(得分:1)
这是一个很好的解释:http://msdn.microsoft.com/en-us/library/0603949d.aspx
基本上它指定存储 - 带有'extern'关键字的声明指定变量具有外部链接 - 它不需要当前上下文中的存储空间,并且将在没有{{1的情况下在某个或其他单元中定义修饰符,如果没有完成,将变成关于缺失引用的链接器错误,因为已经告诉它有一个不存在的变量。一个示例可以是库和多个客户端之间的共享项,在标头中声明为extern
,以便客户端知道它,但存储实际上在库中,以便在访问它时,它们使用正确的值,而不是在包含声明的文件的单元内分配的存储空间的值。 E.g。
extern
答案 1 :(得分:1)
这意味着该变量在此编译单元外部,即它已在不同的编译单元中声明。
答案 2 :(得分:0)
它将搜索该变量的已初始化。
如果全局声明了外部变量或函数,那么它的可见性将整个程序可能包含一个文件或多个文件。例如,考虑一个c程序,它写在两个名为one.c和two.c:
的文件中// one.c
#include<conio.h>
int i=25; //By default extern variable
int j=5; //By default extern variable
/**
Above two line is initialization of variable i and j.
*/
void main(){
clrscr();
sum();
getch();
}
// two.c
#include<stdio.h>
extern int i; //Declaration of variable i.
extern int j; //Declaration of variable j.
/**
Above two lines will search the initialization statement of variable i and j either in two.c (if initialized variable is static or extern) or one.c (if initialized variable is extern)
*/
void sum(){
int s;
s=i+j;
printf("%d",s);
}
同时编译并执行上面两个文件one.c和two.c
答案 3 :(得分:-1)
将某些内容声明为extern
告诉编译器它在解决方案的其他地方声明,因此它不会抱怨它未定义或多次定义。