Читаем Программирование. Принципы и практика использования C++ Исправленное издание полностью

Стандарт языка C++ определен комитетом, работающим под эгидой ISO (International Organization for Standardization — Международная организация по стандартизации) в сотрудничестве с национальными стандартными комитетами, такими как INCITS (США), BSI (Великобритания) и AFNOR (Франция). Действующим стандартом считается документ ISO/IEC 14882:2003 Standard for Programming Language C++. Он доступен как в электронном виде, так и в виде обычной книги: The C++ Standard, опубликованной издательством Wiley (ISBN 2870846747). 

<p id="AutBody_Root569"><strong>A.1.1. Терминология</strong></p>

В стандарте языка C++ даны следующие определения программы на языке C++ и разных его конструкций.

Соответствие стандарту. Программа, написанная на языке C++ в соответствии со стандартом, называется соответствующей стандарту (conforming), или легальной (legal), или корректной (valid).

Зависимость от реализации. Программа может зависеть (и обычно зависит) от свойств (таких как размер типа int или числовое значение символа 'a'), которые точно определены только для заданного компилятора, операционной системы, машинной архитектуры и т.д. Свойства языка, зависящие от реализации, перечислены в стандарте и должны быть указаны в сопроводительной документации компилятора, а также в стандартных заголовках, таких как (см. раздел Б.1.1). Таким образом, соответствие стандарту не эквивалентно переносимости программы на разные реализации языка C++ .

Неопределенность. Смысл некоторых конструкций является неустановленным точно (unspecified), неопределенным (undefined) или не соответствующим стандарту, но не диагностируемым (not conforming but not requiring a diagnostic). Очевидно, что такие свойства лучше не использовать. В этой книге их нет. Перечислим неопределенные свойства, которых следует избегать.

• Несогласованные определения в разных исходных файлах (используйте заголовочные файлы согласованно; см. раздел 8.3).

• Повторное чтение и запись одной и той же переменной в выражении (основным примером является инструкция a[i]=++i;).

• Многочисленные явные преобразования типов (приведения), особенно reinterpret_cast.

<p id="AutBody_Root570"><strong>A.1.2. Старт и завершение программы</strong></p>

В программе на языке С++ должна быть отдельная глобальная функция с именем main. Программа начинается с выполнения именно этой функции. Значение, возвращаемое функцией main, имеет тип int (альтернативный тип void не соответствует стандарту). Значение, возвращаемое функцией main, передается системе. Некоторые системы игнорируют это значение, но признаком успешного завершения программы является нуль, а признаком ошибки — ненулевое значение или исключение, оставшееся не перехваченным (правда, такие исключения считаются признаком плохого стиля).

Аргументы функции main могут зависеть от реализации, но любая реализация должна допускать два варианта (но только одну для конкретной программы).

int main;                       // без аргументов

int main(int argc, char* argv[]); // массив argv[] содержит

                                  // argc C-строк

В определении функции main явно указывать тип возвращаемого значения не обязательно. В таком случае программа, дойдя до конца, вернет нуль. Вот как выглядит минимальная программа на языке C++:

int main { }

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

<p id="AutBody_Root571"><strong>A.1.3. Комментарии</strong></p>

Все, что можно сказать в программе, должно быть сказано. Однако в языке C++ есть два стиля комментариев, позволяющие программистам сказать то, что невозможно выразить с помощью кода.

// это однострочный комментарий

/*

  это многострочный

  блок комментариев

*/

Очевидно, что блоки комментариев чаще всего оформляются как многострочные комментарии, хотя некоторые люди предпочитают разделять их на несколько однострочных.

// Это многострочный

// комментарий,

// представленный в виде трех однострочных комментариев,

/* а это однострочный комментарий, представленный как блочный

   комментарий */

Комментарии играют важную роль для документирования предназначения кода; см. также раздел 7.6.4. 

<p id="AutBody_Root572"><strong>A.2. Литералы</strong></p>
Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT