Где я могу увидеть код, используемый в стандартных библиотеках C ++? - PullRequest
5 голосов
/ 14 ноября 2010

Когда я компилирую программу с #include

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

Открыто ли это для всех или недоступно для публики?

Ответы [ 7 ]

5 голосов
/ 14 ноября 2010

Фактический код находится в специфичных для платформы стандартных библиотеках, которые поставляются с вашим компилятором, вы можете увидеть его, посмотрев на источник реализации стандартной библиотеки.

Вот документация (и источник) для libstdc++ от GNU (поставляется с gcc): http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html.

Скачать исходник с одного из этих зеркал: http://gcc.gnu.org/mirrors.html

3 голосов
/ 14 ноября 2010

Как правило, включаемый файл # доступен для чтения, но реализуемая им библиотека обычно недоступна для чтения. Включаемые файлы на Mac находятся в / usr / include / c ++ .

Код библиотеки зависит от компилятора. Для Gnu C ++, используемой в Linux и Mac, вы определенно можете увидеть код. Возможно, вам придется скачать его. Это доступно в http://gcc.gnu.org/libstdc++/

Я не думаю, что код библиотеки Windows C ++ доступен.

2 голосов
/ 14 ноября 2010

Запустите эту команду из командной строки:

find /usr -name iostream

Это покажет вам каталог, который вы хотите.

2 голосов
/ 14 ноября 2010

Сам по себе стандарт C ++ - это стандарт. Реализация которого осуществляется многими поставщиками. STLport и GNU libstdc ++ имеют открытый исходный код и могут рассматриваться в целом. Visual Studio поставляется со стандартной библиотекой Dinkumware C ++. Это закрытый источник.

Тем не менее, вы всегда можете увидеть источник заголовков, открыв каталог include вашей стандартной библиотеки C ++. Файлы названы так же, как вы их включили. Во многом это все-таки реализовано в заголовках. Но в значительной степени нечитаемы для неопытного глаза.

Но когда дело доходит до использования библиотеки C ++, зависит не от точного исходного кода, а от того, что говорит стандарт C ++. Не программируйте на реализацию, а скорее на стандарт.

2 голосов
/ 14 ноября 2010

Это зависит от того, какой инструментарий вы используете, не каждый поставщик делает свою реализацию публичной. Вы можете посмотреть библиотеку GNU C для начинающих: http://www.gnu.org/software/libc/

Dinkumware , компания, стоящая за стандартной библиотекой шаблонов C ++, которая используется, например, в Visual Studio, предлагает коммерческий продукт, поэтому код доступен не всем - он действительно зависит от вашей лицензии. Некоторые версии Visual Studio действительно поставляются с включенным исходным кодом среды выполнения.

Что касается STL, существует также STLport , реализация STL с открытым исходным кодом.

Лучшим выбором для вас будут проекты, от которых зависит gcc / g ++.

1 голос
/ 14 ноября 2010

Все системные заголовки поставляются с вашим компилятором. В системах Linux их обычно можно найти в /usr/include. На других платформах обычно будет жить там, где вы установили компилятор.

Коммерческие библиотеки обычно не поставляют исходный код. В linux их обычно можно найти в исходных пакетах.

1 голос
/ 14 ноября 2010

Если вы используете что-то вроде Visual Studio, вы можете поставить точку останова, а затем начать построчно проходить по коду, и он будет открывать включенные файлы по мере продвижения. Самый быстрый путь в файл на мой взгляд. В противном случае вы можете найти код где-нибудь на вашем ПК ... на моем, например, в C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\ostream, заменив ostream на iostream, sstream и т. Д. (Обратите внимание, что это имена файлов без расширений), но также если вы посмотрите на каталог увидим много .h и .c файлов

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