Программы, приведенные в этой книге, полностью соответствуют стандарту ANSI/ISO для C++ и могут быть скомпилированы практически любым современным С++-компилятором, включая Visual C++ (Microsoft) и C++ Builder (Borland). Следовательно, при использовании современного компилятора у вас не должно быть проблем с компиляцией программ из этой книги. (В этом случае вам вообще не понадобится информация, представленная в этом приложении.)

Но если вы используете компилятор, созданный несколько лет назад, то при попытке скомпилировать наши примеры он может выдать целый список ошибок, не распознав ряд новых С++-средств. И в этом случае не стоит волноваться. Для того чтобы эти программы заработали со старыми компиляторами, нужно внести в них небольшие изменения. Чаще всего старые и новые С++-программы отличаются использованием двух средств: заголовков и пространств имен. Вот об этом и пойдет речь в этом приложении.

Как упоминалось в главе 2, инструкция #include включает в программу заданный заголовок. Для более ранних версий C++ под заголовками понимались файлы с расширением .h. Например, в старой С++-программе для включения заголовка iostream была бы использована следующая инструкция.

#include

В этом случае в программу был бы включен заголовочный файл iostream.h. Таким образом, включая в старую С++-программу заголовок, необходимо задавать имя файла с расширением .h.

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

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

Чтобы преобразовать эти "новые" заголовки в "старые" заголовочные файлы, достаточно добавить расширение .h.

Включая современный заголовок в программу, необходимо помнить, что его содержимое относится к пространству имен std. Как упоминалось выше, пространство имен — это просто декларативная область. Ее назначение — локализовать имена идентификаторов во избежание коллизий с именами. Старые версии C++ помещают имена библиотечных функций в глобальное пространство имен, а не в пространство имен std, используемое современными компиляторами. Таким образом, работая со старым компилятором, не нужно использовать эту инструкцию:

using namespace std;

В действительности большинство старых компиляторов вообще не воспримут инструкцию using namespace.

Два простых изменения

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

#include

using namespace std;

такой.

#include

Это изменение преобразует "новую" программу в "старую". Поскольку при использовании "старого" заголовка в глобальное пространство имен считывается все содержимое заголовочного файла, необходимость в использовании namespaee-инструкции отпадает. После внесения этих изменений, программу можно скомпилировать с помощью старого компилятора.

Иногда приходится вносить и другие изменения. C++ наследует ряд заголовков из языка С. Язык С не поддерживает современный стиль использования С++-заголовков, используя вместо них заголовочные .h-файлы. Для разрешения обратной совместимости стандарт C++ по-прежнему поддерживает заголовочные С-файлы. Однако стандарт C++ также определяет современные заголовки, которые можно использовать вместо заголовочных С-файлов. В С++-версиях стандартных С-заголовков к имени С-файла просто добавляется префикс 'c' и опускается расширение .h. Например, С++-заголовком для файла math.h служит заголовок , а для файла string.h— заголовок . Несмотря на то что в С++-программу разрешено включать заголовочный С-файл, против такого подхода у разработчиков стандарта есть существенные возражения (другими словами, это не рекомендовано). Поэтому в настоящей книге используются современные С++-заголовки во всех инструкциях #include. Если ваш компилятор не поддерживает С++-заголовки для С-заголовков, просто замените "старые" заголовочные файлы.

<p id="annex V">Приложение В: *.NET-расширения для C++</p>
Перейти на страницу:

Все книги серии Изучайте C++ с профессионалами

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