extern如何在c ++中工作?

时间:2010-03-25 04:42:20

标签: c++ syntax extern

这来自<iostream>

namespace std 
{
  extern istream cin;       ///< Linked to standard input
  extern ostream cout;  
...

似乎通过使用extern,其他命名空间中定义的数据类型才可用?

5 个答案:

答案 0 :(得分:8)

extern表示“这些变量是在其他编译单元(.cpp或.lib文件)中定义的”

在这种情况下,您将#include <iostream>放入.cpp文件中,并且因为cincout被声明为extern,编译器会让您使用它们而不会抱怨。然后,当链接器运行时,它会查找所有extern变量并将其全部排序。

答案 1 :(得分:4)

extern用于指代在不同编译单元中定义的变量(现在,您可以将编译单元视为.cpp文件)。示例中的语句声明而不是定义 cincout。它告诉编译器这些对象的定义可以在另一个编译单元中找到(它们声明为extern)。

答案 2 :(得分:2)

不,这是一种明确的方式,可以声明cincout,而无需实际定义它们。

答案 3 :(得分:0)

extern 关键字告诉编译器在另一个源中(即,在当前作用域之外)声明了一个变量。然后,链接器找到该实际声明,并设置 extern 变量以指向正确的位置。

extern 语句声明的

变量不会为其分配任何空间,因为应该在其他地方正确定义它们。如果将变量声明为 extern ,并且链接程序未找到该变量的实际声明,则它将显示错误。

例如。 extern int i;

// this声明在程序的某个位置定义了一个名为i的int类型的变量。

答案 4 :(得分:0)

这里有些答案说extern表示变量是在其他编译单元中定义的。然后,不应编译以下内容,因为没有其他编译单元或文件提供给编译器。

extern int a;
int main(){
    std::cout<<a<<std::endl;    //Prints 3
}
int a=3;

因此,我认为在答案之一中所述的变量情况下,extern明确用于分隔声明和定义。我认为对于函数来说这是没有用的。