Kniga-Online.club
» » » » Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

Читать бесплатно Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп. Жанр: Программирование год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:
разделы 8.5.5 и A.8.3) — это механизм указания на объекты, работающий на этапе выполнения программы. Ключевые слова typedef (см. разделы 20.5 и 27.3.1) и namespace относятся к механизмам ссылок на имена, работающим на этапе компиляции. В частности, инструкция typedef не вводит новый тип, а просто задает новое имя существующего типа. Рассмотрим пример.

typedef char* Pchar; // Pchar — это имя типа char*

Pchar p = "Idefix";  // OK: p — это указатель типа char*

char* q = p;         // OK: p и q — указатели типа char

int x = strlen(p);   // OK: p — указатель типа char* 

A.17. Директивы препроцессора

Каждая реализация языка C++ содержит препроцессор (preprocessor). В принципе препроцессор работает до компилятора и преобразовывает исходный код, написанный нами, в то, что видит компилятор. В действительности это действие интегрировано в компиляторе и не представляет интереса, за исключением того, что оно может вызывать проблемы. Каждая строка, начинающаяся символом #, представляет собой директиву препроцессора.

A.17.1. Директива #include

Мы широко использовали препроцессор для включения заголовочных файлов. Рассмотрим пример.

#include "file.h"

Эта директива приказывает препроцессору включить содержимое файла file.h в точку исходного текста, где стоит сама директива. Для стандартных заголовков используются угловые скобки (<...>), а не кавычки ("..."). Например:

#include<vector>

Это рекомендованная система обозначений для включения стандартных заголовков. 

A.17.2. Директива #define

Препроцессор выполняет также определенные манипуляции с символами, которые называются макроподстановками (macro substitution). Например, определим имя символьной строки.

#define FOO bar

Теперь везде, где препроцессор увидит символы FOO, они будут заменены символами bar.

int FOO = 7;

int FOOL = 9;

В таком случае компилятор увидит следующий текст:

int bar = 7;

int FOOL = 9;

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

С помощью директивы define можно также определить макросы, принимающие параметры.

#define MAX(x,y) (((x)>(y))?(x) : (y))

Их можно использовать следующим образом:

int xx = MAX(FOO+1,7);

int yy = MAX(++xx,9);

Эти выражения будут развернуты так:

int xx = (((bar+1)>( 7))?(bar+1) : (7));

int yy = (((++xx)>( 9))?(++xx) : (9));

Подчеркнем, что скобки необходимы для того, чтобы получить правильный результат при вычислении выражения FOO+1. Кроме того, переменная xx была инкрементирована дважды совершенно неочевидным образом. Макросы чрезвычайно популярны, в основном потому, что программисты на языке С имели мало альтернатив. Обычные заголовочные файлы содержат определения тысяч макросов. Будьте осторожны!

Если уж вам приходится использовать макросы, то называйте их, используя только прописные буквы, например ALL_CAPITAL_LETTERS, а обычные имена не должны состоять только из прописных букв. Прислушайтесь к хорошему совету. Например, в одном из вполне авторитетных заголовочных файлов мы нашли макрос max.

См. также раздел 27.8.

Приложение Б

Обзор стандартной библиотеки

“По возможности, вся сложность должна быть скрыта

от постороннего взгляда”.

Дэвид Дж. Уилер (David J. Wheeler)

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

Б.1. Обзор

Это приложение является справочником и не предназначено для последовательного чтения от начала до конца, как обычная глава. В нем более или менее систематично описываются основные элементы стандартной библиотеки языка С++. Впрочем, этот справочник не полон; он представляет собой краткий обзор с немногочисленными примерами, иллюстрирующими ключевые возможности. За более подробным объяснением читателям часто придется обращаться к соответствующим главам данной книги. Кроме того, следует подчеркнуть, что мы не стремились к точности стандарта и не придерживались его терминологии. Более подробную информацию читатели найдут в книге Stroustrup, The C++ Programming Language[13]. Полным определением языка является стандарт ISO C++, но этот документ не предназначен для новичков и не подходит для первоначального изучения языка. Не забудьте также об использовании документации, доступной в Интернете.

Какая польза от выборочного (а значит, неполного) обзора? Вы можете быстро найти известную операцию или бегло просмотреть раздел в поисках доступных операций. Вы можете найти очень подробную информацию в других источниках: но что конкретно искать, вам подскажет именно этот краткий обзор. В этом приложении содержатся перекрестные ссылки на учебный материал из других глав, а также кратко изложены возможности стандартной библиотеки. Пожалуйста, не старайтесь запомнить изложенные в нем сведения; они предназначены не для этого. Наоборот, это приложение позволит вам избавиться от необходимости запоминать лишнее.

Здесь вы можете найти готовые средства, вместо того, чтобы изобретать их самостоятельно. Все, что есть в стандартной библиотеке (и особенно все, что перечислено в приложении), оказалось весьма полезным для многих людей. Стандартные возможности библиотеки практически всегда разработаны, реализованы и документированы намного лучше, чем это можете сделать вы, находясь в цейтноте. Кроме того, их переносимость из одной системы в другую обеспечена намного лучше. Итак, по возможности всегда следует отдавать предпочтение стандартным библиотечным средства, а не “самогону” (“home brew”). В таком случае ваш код будет намного понятнее.

Если вы чувствительная натура, то огромное количество возможностей может вас напугать. Не бойтесь, просто игнорируйте то, что вам не нужно. Если же вы дотошный человек, то обнаружите, что о многом мы не сказали. Полнота нужна лишь для справочников, предназначенных для экспертов, и онлайн-документации. В любом случае многое покажется вам загадочным и, возможно, интересным. Постигайте эти тайны!

Б.1.1. Заголовочные файлы

Интерфейсы средств из стандартной библиотеки определены в заголовках. Некоторые из заголовков, упомянутых в следующей таблице, не входят в стандарт языка C++, принятый ISO в 1998 году. Тем не менее они станут частью следующего стандарта и в настоящее время являются широкодоступными. Такие заголовки обозначены “C++0x”. Для их использования может потребоваться отдельная инсталляция и/или пространство имен, отличающееся от std (например, tr1 или boost). В этом разделе вы узнаете, какие средства могут стать доступными в вашей программе, а также

Перейти на страницу:

Бьёрн Страуструп читать все книги автора по порядку

Бьёрн Страуструп - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


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

Отзывы читателей о книге Программирование. Принципы и практика использования C++ Исправленное издание, автор: Бьёрн Страуструп. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*