当我试图看到cout的定义时,我会登陆到声明为的iostream文件,
extern _CRTDATA2 ostream cout;
那么定义它的位置?因为extern只是声明而不是定义。
答案 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