|
Программирование >> Инициализация объектов класса, структура
#include <some file.h> может быть указано двумя способами: #include my file.h Если имя файла заключено в угловые скобки (<>), считается, что нам нужен некий стандартный заголовочный файл, и компилятор ищет этот файл в предопределенных местах. (Способ определения этих мест сильно различается для разных платформ и реализаций.) Двойные кавычки означают, что заголовочный файл - пользовательский, и его поиск начинается с того каталога, где находится исходный текст программы. Заголовочный файл также может содержать директивы #include. Поэтому иногда трудно понять, какие же конкретно заголовочные файлы включены в данный исходный блок программы до тех пор, пока некоторое условие не изменится с true на false. int main() { int iterations = 0; bool continue loop = true; while ( continue loop != false ) iterations++; cout << кл б1л волнен << iterations << раз\n , if ( iterations == 5 ) continue loop = false; return 0; Например: В этом надуманном примере цикл while выполняется пять раз, до тех пор пока переменная iterations не получит значение 5 и переменная continue loop не станет равной false. Инструкция iterations++; увеличивает значение переменной iterations на единицу. (Инструкции цикла детально рассматриваются в главе 5.) 1.3. Директивы препроцессора Заголовочные файлы включаются в текст программы с помощью директивы препроцессора #include. Директивы препроцессора начинаются со знака диез (#), который должен быть самым первым символом строки. Программа, которая обрабатывает эти директивы, называется препроцессором (в современных компиляторах препроцессор обычно является частью самого компилятора). Директива #include включает в программу содержимое указанного файла. Имя файла #define BOOKSTORE H /* содержимое файла bookstore.h */ #ifndef BOOKSTORE H #endif Условная директива #ifndef проверяет, не было ли значение BOOKSTORE H определено ранее. (BOOKSTORE H - это константа препроцессора; такие константы принято писать заглавными буквами.) Препроцессор обрабатывает следующие строки вплоть до директивы #endif. В противном случае он пропускает строки от #ifndef до # endif. Директива #define BOOKSTORE H определяет константу препроцессора BOOKSTORE H. Поместив эту директиву непосредственно после директивы #ifndef, мы можем гарантировать, что содержательная часть заголовочного файла bookstore.h будет включена в исходный текст только один раз, сколько бы раз ни включался в текст сам этот файл. Другим распространенным примером применения условных директив препроцессора int main() { #ifdef DEBUG cout << Начало волнения main()\n ; #endif string word; vector<string> text; while ( cin >> word ) #ifdef DEBUG cout << Прочитано слово: << word << \n ; #endif text.push back(word); ... является включение в текст программы отладочной информации. Например: Если константа DEBUG не определена, результирующий текст программы будет выглядеть int main() так: string word; текст, и некоторые заголовочные файлы могут оказаться включенными несколько раз. Избежать этого позволяют условные директивы препроцессора. Рассмотрим пример: int main() В противном случае мы получим: cout << Начало волнения main()\n ; string word; vector<string> text; while ( cin >> word ) { cout << Прочитано слово: text.push back(word); << word << \n ; t.pus Константа препроцессора может быть определена в командной строке при вызове компилятора с помощью опции -D (в различн1х реализациях эта опция может называться по-разному). Для UNIX-систем вызов компилятора с определением препроцессорной константы DEBUG выглядит следующим образом: $ CC -DDEBUG main.C Есть констант!, которые автоматически определяются компилятором. Например, м1 можем узнать, компилируем ли мы С++ или С программу. Для С++ программы автоматически определяется константа cplusplus (два подчеркивания). Для стандартного С определяется STDC . Естественно, обе константы не могут быть #idfef cplusplus компиляция С++ программе! extern C ; extern C объясняется в главе 7 #endif определены одновременно. Пример: int main(int,int); Другими полезными предопределенными константами (в данном случае лучше сказать переменными) препроцессора являются LINE и FILE . Переменная LINE содержит номер текущей компилируемой строки, а FILE - имя компилируемого файла. Вот пример их использования: vector<string> text; while ( cin >> word ) text.push back(word); ...
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |