c ++中“extern”语句的确切含义是什么?

时间:2013-09-20 10:52:55

标签: c++ c extern

我想知道在c ++中使用“extern”语句是什么,以及何时/为什么使用它?。
感谢。

4 个答案:

答案 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告诉编译器它在解决方案的其他地方声明,因此它不会抱怨它未定义或多次定义。