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

   
На этом шаге мы рассмотрим новые правила именования и использования заголовочных файлов.

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

   
С определением новых имен для стандартных заголовочных файлов представилась хорошая возможность стандартизировать
расширения заголовочных файлов. Раньше на практике использовались разные варианты расширений (например, .h, .hpp и .hxx).
Вероятно, спецификации нового стандарта в области заголовочных файлов станут для кого-то неожиданными - теперь стандартные
заголовочные файлы вообще не имеют расширений. Команды включения стандартных заголовочных файлов выглядят примерно так:

  #include <iostream> 
  #include <string>

   
Аналогичное правило действует для заголовочных файлов в стандарте С. Теперь заголовочные файлы С снабжаются
префиксом с вместо прежнего расширения .h:

  #include <cstdlib>  // было: <stdlib.h>
  #include <cstring>  // было: <string.h>

   
В заголовочных файлах все идентификаторы объявляются в пространстве имен std.

   
Одно из преимуществ новой схемы выбора имен заключается в том, что она позволяет легко отличить старый заголовочный файл для
строковых функций char* от стандартного заголовочного файла C++ для работы с классом string:

  #include <string>   // Класс string языка C++
  #include <cstring>  // Функции char* языка С

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

   
Для сохранения совместимости с С оставлена поддержка "старых" стандартных заголовочных файлов С.
Если потребуется, вы можете использовать команду

  #include <stdlib.h>

   
В этом случае идентификаторы объявляются как в глобальной области видимости, так и в пространстве имен std. На практике
все выглядит так, словно идентификаторы объявлены в пространстве имен std, после чего была выполнена директива
using.

   
Спецификация заголовочных файлов C++ "старого" формата (например, <iostream.h>) в стандарте отсутствует;
кстати, это решение неоднократно менялось в процессе стандартизации. Таким образом, старые заголовочные файлы официально
не поддерживаются. Вероятно, на практике большинство поставщиков будут предоставлять их для обратной совместимости.
Однако изменения в заголовках не ограничиваются введением пространства имен std, поэтому в общем случае следует либо
использовать старые имена заголовочных файлов, либо переключиться на новые стандартизированные имена.

   
Со следующего шага мы начнем рассматривать обработку ошибок и исключений.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий