cout是在iostream中声明的,但在哪里定义?

时间:2013-07-21 13:18:46

标签: c++ stl

当我试图看到cout的定义时,我会登陆到声明为的iostream文件,

extern _CRTDATA2 ostream cout;

那么定义它的位置?因为extern只是声明而不是定义。

1 个答案:

答案 0 :(得分:1)

全局符号在与应用程序链接的运行时库中定义。例如,在gcc中,您传递了将您的应用程序与-lstdc++库链接的编译器选项libstdc++.a。这就是所有这些符号所在的位置。

尽管如此,这是特定于您的编译器/运行时库版本的,并且会有所不同。 Microsoft Visual C ++可能表现不同,但思路相同:符号位于随C ++编译器提供的预编译库中。

使用GNU,您可以输入:

nm -g libstdc++.a

查看库中的符号。输出可能看起来像这样(在许多其他行中):

ios_init.o:
                 U _ZSt3cin
globals_io.o:
0000000000000000 D _ZSt3cin
0000000000000000 D _ZSt4cerr
0000000000000000 D _ZSt4clog
0000000000000000 D _ZSt4cout
0000000000000000 D _ZSt4wcin
0000000000000000 D _ZSt5wcerr
0000000000000000 D _ZSt5wclog
0000000000000000 D _ZSt5wcout