На многие вопросы ответ, кажется, можно найти в «стандарте». Однако где мы это находим? Желательно онлайн.
Иногда поиск в Google может показаться бесполезным, особенно в отношении стандартов C, поскольку они тонут в потоке дискуссий на форумах по программированию.
Для начала, поскольку это те, которые я ищу прямо сейчас, где есть хорошие онлайн-ресурсы для:





Стандарты ISO стоят денег, от умеренных (для версии PDF) до немного дороже (для книжной версии).
Однако, хотя они еще не доработаны, их обычно можно найти в Интернете в виде черновиков. В большинстве случаев финальная версия существенно не отличается от последней черновой версии, поэтому, хотя она и не идеальна, она вполне подойдет.
Стандарты ISO C и C++ чертовски дороги. С другой стороны, INCITS переиздает их гораздо дешевле. У http://www.techstreet.com/ вроде есть PDF за 30 долларов (ищите INCITS / ISO / IEC 14882: 2003).
Доступны и печатные версии. Ищите версии Британского института стандартов, опубликованные Wiley.
В настоящее время techstreet.com предлагает стандарт C++ 2003 в формате PDF за 30 долларов США и стандарт C++ 2011 за 403 доллара США.
Большое спасибо за ссылку на Techstreet. Интернет-магазин ANSI.org не стал бы продавать мне стандарт C11 (отказ от кредитной карты из соображений «безопасности», т. Е. Без уважительной причины), в то время как покупка по аналогичной цене (с той же картой) на Techstreet прошла гладко и без заминка.
Вы можете найти проект международного стандарта для C++ 0x полезным.
FCD - это доступен сейчас.
Стандарты C99 и C++ 03 доступны в виде книги от Wiley:
Плюс, как уже упоминалось, рабочий проект будущих стандартов часто доступен на сайтах комитетов:
Черновик C-201x доступен как N1336, а черновик C++ 0x как N3225.
Замечание о версии для печати стандарта C от Wiley: это стандарт C99, а не C89 / 90.
C99 - это доступно онлайн. Цитируется из www.open-std.org:
The lastest publically available version of the standard is the combined C99 + TC1 + TC2 + TC3, WG14 N1256, dated 2007-09-07. This is a WG14 working paper, but it reflects the consolidated standard at the time of issue.
Фактические документы стандартов могут быть не самыми полезными. Большинство компиляторов не полностью реализуют стандарты и иногда могут конфликтовать. Так что документация по компилятору, которая у вас уже есть, будет более полезной. Кроме того, в документации будут содержаться примечания, относящиеся к конкретной платформе, и примечания по любым оговоркам.
Документация по компилятору важна, но знание языка, а не знание вашей реализации - это гораздо больше.
С действующим стандартом вы можете находить ошибки в компиляторах и помогать им лучше следовать стандарту, исправляя их, отправляя отчеты об ошибках или просто заходя в IRC-комнату и разговаривая с кем-то, кто может это исправить.
@hdante - абсолютно. Если в качестве идеала у вас есть стандарт, вы можете потребовать от производителя совместимости. @ / all - намерение здесь не состояло в том, чтобы сказать, что стандарт бесполезен (к вашему сведению, переход от стандарта в первую очередь - это подход, который я использовал в прошлом), но что вы также должны знать свою отправную точку в реальном мире, что, надеюсь, соответствует стандартам.
В любом случае документация компилятора обычно не учитывает то, что предусмотрено стандартами.
Черновые ссылки:
C++ 11 (+ редакционные исправления): N3337 HTML, PDF
C++ 14 (+ редакционные исправления): N4140 HTML, PDF
C99 N1256
Drafts of the Standard are circulated for comment prior to ratification and publication.
Note that a working draft is not the standard currently in force, and it is not exactly the published standard
Ссылка «N1169» ведет к четырехстраничному документу, содержащему несколько отчетов о дефектах. Это ни в коем случае не черновик стандарта C++ (или любого другого).
Мне нравится этот ответ, потому что он дает понять, какой черновик является самым последним для каждого основного выпуска.
Текст проект стандарта ANSI C (он же C.89) доступен в Интернете. Он был стандартизирован комитетом ANSI до принятия стандартом ISO C (C.90), поэтому нумерация разделов различается (разделы 2–4 ANSI примерно соответствуют разделам 5–7 ISO), хотя содержание (предполагается быть) в значительной степени идентичны.
Неужели это последний черновик? Одно различие, о котором я знаю, заключается в том, что этот черновик определяет диапазон tm_sec как [0, 60], а C90 (неправильно) [0, 61]
@Cubbi, поскольку я не могу лично доказать, что это так, я изменил формулировку. Спасибо.
@Cubbi: он сказал, что это последний проект стандарта ANSI. Похоже, кто-то из рабочей группы ISO запутался и подумал, что возможные две дополнительные секунды в году могут произойти в / после того же минута ... Или они получили ошибку от POSIX, которые не говорят, где они ее получили от, только то, что они исправили это, чтобы выровнять с C99.
K&R 2-е изд. (ANSI C), который является нет на основе фактического окончательного стандарта, действительно указывает, что tm_sec - это (0, 61). Я думал, что это было для дополнительных секунд, имеет смысл.
@veganaiZe Диапазон составляет [0, 60], чтобы разрешить дополнительные секунды (в противном случае это было бы [0, 59]). [0, 61] было ошибкой, подразумевая, что можно было бы иметь две дополнительные секунды в одну минуту (это не так).
Хотя это и не настоящий стандарт, есть поправка к ISO C (C89 / 90) под названием C94 / 95, или Нормативное дополнение 1. Он был интегрирован в C99, хотя некоторые компиляторы, такие как Лязг, позволяют вам указывать -std=c94 в командной строке. ISO / IEC 9899: 1990 / Amd 1: 1995 можно приобрести по высокой цене в SAI GLOBAL (PDF или бумажная копия).
Краткое содержание документа можно найти в здесь.
When the (then draft) ANSI C Standard was being considered for adoption of an International Standard in 1990, there were several objections because it didn't address internationalization issues. Because the Standard had already been several years in the making, it was agreed that a few changes would be made to provide the basis (for example, the functions in subclause 7.10.7 were added), and work would be carried out separately to provide proper internationalization of the Standard. This work has culminated in Normative Addendum 1.
Normative Addendum 1 embodies C's reaction to both the limitations and promises of international character sets. Digraphs and the header were meant to improve the appearance of C programs written in national variants of ISO 646 without, e.g., { or } characters. On the other end of the spectrum, the facilities connected to and extend the old Standard's barely adequate basis into a complete and consistent set of utilities for handling wide characters and multibyte strings.
This document summarizes Normative Addendum 1. It is intended to quickly inform readers who are already familiar with the Standard; it does not, and cannot, introduce the complex subject matter behind NA1, nor can it replace the original document as a reference manual. (Nevertheless, it tries to be as accurate as possible, and its author would like to hear about any errors or omissions.)
Обратите внимание на обсуждение MSO. Ответы на этот вопрос очень ценны для программистов на C и C++; его следует оставить открытым (не в последнюю очередь потому, что есть стандарт C++ 2014, который нужно добавить к ответам, после того, как он был опубликован - он уже утвержден).