понимание заголовочных файлов / библиотек C ++ и исходного кода функций - PullRequest
0 голосов
/ 24 апреля 2018
#ifndef CPPREFERENCE_IOSTREAM_H
#define CPPREFERENCE_IOSTREAM_H

#include <ios>
#include <streambuf>
#include <istream>
#include <ostream>
#include <iosfwd>

namespace std {

extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;

}  // namespace std

#endif // CPPREFERENCE_IOSTREAM_H

Код является заголовком iostream.Я пытаюсь понять, как функция Cout была реализована в этом заголовочном файле.К сожалению, хотя я не могу его найти?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Вы действительно не увидите здесь никакой реализации.Когда вы делаете #include <iostream>, все, что он делает, это вставляет этот код в ваш код.Таким образом, компилятор увидит все определения, например extern istream cin, и узнает, что есть что-то вроде std::cin.Однако это не значит, что он знает, как это реализовано.

Реализация стандартной библиотеки C ++ будет происходить из некоторого файла dll (в ОС Windows).Я думаю, что это MSVCP*.dll.Этот dll файл будет содержать скомпилированный машинный код, специфичный для этой ОС.

Когда вы компилируете свое приложение, это dll будет связано с ним.Но вы действительно не можете получить исходный код (у людей в Microsoft есть он).Хотя вы можете разобрать этот dll, чтобы увидеть код в нем.

0 голосов
/ 24 апреля 2018

Вот как это реализовано в LLVM, если я вас правильно понимаю, это то, что вы хотите?

http://llvm.org/svn/llvm-project/libcxx/trunk/src/ios.cpp

http://llvm.org/svn/llvm-project/libcxx/trunk/src/iostream.cpp

http://llvm.org/svn/llvm-project/libcxx/trunk/src/strstream.cpp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...