2015-07-19 8 views
-1

Я читаю Ускоренное C++ и есть строки, написанные там о стандартном заголовочномВ контексте C++, что такое «реализация»?

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

Мой первый вопрос заключается в том, что если мы бежим ОС Windows и в одной руке у нас есть codeblocks (GNU компилятор) и во втором мы имеем Turbo C++. Итак, мы рассматриваем их как отдельную реализацию?

Мой второй вопрос заключается в том, как на самом деле эти стандартные заголовки реализованы?

+1

Код :: Blocks - это [IDE, а не компилятор] (http://wiki.codeblocks.org/index.php?title=FAQ-General#Q:_What_Code::Blocks_is_not.3F) (таким образом а не реализация C++). – melpomene

+0

Пожалуйста, укажите причину падения. – YakRangi

+0

@melpomene thats, что я спрашиваю, что на самом деле реализация ?? – YakRangi

ответ

3

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

Каждый поставщик компилятора, такой как GNU и Free Software Foundation для gcc, люди из Университета штата Иллинойс за clang, люди из Microsoft, Borland, IBM, Intel и т. Д., Которые производят компилятор, будут производить «реализацию» компилятор. Если я напишу свой собственный компилятор C++, который будет реализацией. У меня есть свой собственный компилятор для языка Pascal (написанный на C++ и использующий LLVM в качестве бэкэнд), который является реализацией языка Pascal, - и, как и все реализации, он соответствует стандарту, но имеет некоторые функции, определенные реализацией , Все реализации будут иметь некоторые вещи, которые «на основе того, что реализатор решили сделать», несколько возможных причин:

  1. Стандарт не специфична: размер int или Паскаля integer не указана за «должно быть по крайней мере, этого большого ... », так что, пока выполняются минимальные критерии, разработчик может делать то, что он/она/они выбирают.
  2. Расширения - что-то, что выходит за рамки стандарта.Часто стандарт имеет ограничения или недостающие функциональные возможности, которые разработчик может решить «улучшить» (это делает реализацию «нестандартной», но если расширение не изменяет поведение стандартно совместимого кода, оно «безопасно» для добавления) [например, у Паскаля нет «имен в файлах», поэтому программа Pascal не может создать файл по определенному имени - большинство реализаций имеют НЕКОТОРЫЙ способ создать файл по определенному имени в качестве расширения]
  3. Стандарт определяет «поведение, определяемое реализацией» - аналогично неспецифическому, стандарт может сказать, что «это зависит от того, что разработчик должен делать, как он/она/они хотят».
+0

Вау, да, это замечательно педантично автора. –

+0

Итак, можно ли предположить, что каждый компилятор - это другая реализация? – YakRangi

+0

btw отличный ответ. – YakRangi

2

Т.Л., др «реализация» здесь является реализация теоретической абстрактной машины под названием «C++»

Вы путаете IDES/редакторы и составители.

GCC 5.1 - это реализация компилятора/компоновщика/инструментальной линейки/стандартной библиотеки («реализация» в целом).

Как Visual C++ 2015 (хотя эта номенклатура также распространяется на IDE, спасибо, Microsoft!).

Как и ваш продукт Turbo C++, который старше C++ и старше вас.

CodeBlocks - это IDE, что вызывает инструментальную цепочку. Он может быть или не быть таким же, как вы используете с вашей древней установкой Turbo C++, хотя я очень сомневаюсь в этом, так как ваш Turbo C++ требует запуска эмулятора DOS (ROFL).

+0

Inb4 он старше, чем Turbo. –

+0

Является ли Visual C++ «компилятор/компоновщик/инструментальная цепочка/стандартная реализация библиотеки», тогда как Visual Studio является IDE (для нескольких языков программирования)? –

+0

@ChristianHackl: Да, я полагаю, что это ближе, хотя Visual C++ сама по-прежнему объявляется как IDE. К сожалению, трудно быть точным, потому что MS буквально не различает IDE и компилятор. Вы правы в том, что Visual Studio - это набор (IDE и реализация). –

Смежные вопросы