- •Предисловие
- •Библиографический список
- •Контрольные вопросы
- •Библиографический список
- •Тема 2 Переменные и базовые типы данных языка с
- •Контрольные вопросы
- •Библиографический список
- •Тема3 Организация циклов в языке с
- •Контрольные вопросы
- •Библиографический список
- •Тема 4 Принятие решений. Условные операторы в языке с
- •Контрольные вопросы
- •Библиографический список
- •Тема 5 Числовые массивы в языке программирования с
- •Тип имя_массива[размер];
- •Тип имя_массива[размер1] [размер2];
- •Тип имя_массива[размер1] [размер2] [размерN];
- •Контрольные вопросы
- •Библиографический список
- •Тема 6 Символьные массивы в языке с. Работа со строками
- •Тип имя_массива[размер];
- •Тип имя_массива[размер1] [размер2];
- •Тип имя_массива[размер1] [размер2] [размерN];
- •Контрольные вопросы
- •Библиографический список
- •Тема 7 Указатели в языке программирования с
- •Int *ptr; // объявили указатель на целую переменную
- •Контрольные вопросы
- •Библиографический список
- •Тема 8 Указатели и массивы в языке с
- •Int data[7]; // обычный массив
- •Int *pd[7]; // массив указателей
- •Контрольные вопросы
- •Библиографический список
- •Тема 9 Динамическое распределение памяти в языке с
- •If (!ptr) // условие логического отрицания
- •If (!ptr) // условие логического отрицания
- •Контрольные вопросы
- •Библиографический список
- •Тема 10 Функции Общие сведения о функциях языка с
- •Fun(тип имя_перем1, тип имя_перем2, , тип имя_перем n)
- •Контрольные вопросы
- •Библиографический список
- •Тема 11 Указатели и функции в языке программирования с
- •Тип_возвращаемый_функцией(*имя_указателя_на_функцию)(аргументы);
- •Контрольные вопросы
- •Библиографический список
- •Тема 12 Файловый ввод/вывод в языке с
- •Контрольные вопросы
- •Библиографический список
- •Тема 13 Структуры – производные типы данных языка с
- •Int age; // возраст
- •Int age; // возраст
- •Int age; // возраст
- •Int age; // возраст
- •Int age; // возраст
- •Int age; // возраст
- •Контрольные вопросы
- •Библиографический список
- •Тема 14 Объединения и перечислимые типы в языке с
- •Контрольные вопросы
- •Библиографический список
- •Тема 15 Структуры и функции языка с
- •Контрольные вопросы
- •Библиографический список
- •Тема 16 Операции с разрядами (битами) в языке с
- •Контрольные вопросы
- •Библиографический список
- •Тема 17 Программы, состоящие из нескольких файлов, на языке с
- •Спецификатор extern
- •Спецификатор static
- •Спецификатор register
- •Спецификатор auto
- •Контрольные вопросы
- •Библиографический список
- •Тема 18 Рекурсивные алгоритмы и функции
- •Переместить (a, b);
- •Контрольные вопросы
- •Библиографический список
- •Тема 19 Препроцессор языка с
- •Директива #define
- •Директива #error
- •Директива #include
- •Директивы условной компиляции
- •2_ Я_последовательность операторов программного кода
- •3_ Я_последовательность операторов программного кода
- •Директива #line
- •Директива#pragma
- •Предопределенные символические константы
- •Макрос подтвержденияassert
- •Контрольные вопросы
- •Библиографический список
- •Тема 20 Программы на языке с при использовании статически подключаемой библиотеки
- •Контрольные вопросы
- •Библиографический список
- •Тема 21 Использование аргументов командной строки в с
- •Контрольные вопросы
- •Контрольная работа № 2 Покупки в супермаркете
- •Приложение Управление конфигурациями проекта в Visual Studio 2010
Директива #include
Директива #includeдает указание компилятору читать еще один исходный файл в дополнение к тому, в котором находится сама директива [3]. Имя исходного (подключаемого файла) файла должно быть заключено в двойные кавычки или угловые скобки. Обычно имена стандартных заголовочных файлов заключают в угловые скобки, а кавычки приберегают для имен специальных файлов, относящихся к конкретной программе. Способ поиска файла зависит от того, в кавычках или угловых скобках находится его имя. Если имя заключено в угловые скобки, то поиск файла проводится тем способом, который определен в компиляторе. Часто это означает поиск определенного каталога, специально предназначенного для хранения таких файлов. Если имя заключено в кавычки, то поиск файла проводится другим способом. Во многих компиляторах это означает поиск файла в текущем рабочем каталоге. Если же файл не найден, то поиск повторяется уже так, как будто имя файла заключено в угловые скобки [3].
Файлы, имена которых находятся в директивах #include, могут в свою очередь содержать другие директивы#include. Они называются вложенными. Количество допустимых уровней вложенности у разных компиляторов может быть разным. Однако в стандарте С89 предусмотрено, что компиляторы должны допускать не менее 8 таких уровней [3].
Директивы условной компиляции
Директивы условной компиляции дают возможность выборочно компилировать части исходного кода программы. Этот процесс называется условной компиляцией[3].
Директива #ifвыглядит следующим образом:
#if константное_выражение
последовательность операторов программного кода
#endif
Если находящееся за директивой #ifконстантное выражение истинно, то компилируется код, который находится между этим выражением и#endif, обозначающей конец блока#if. Константное выражение может быть задано через директиву#define. При этом если, например, задано число, не равное нулю, то такое константное выражение будет истинно; если же заданное число есть нуль, то константное выражение будет ложным. В частности, константное выражение может быть задано макросом с формальными параметрами, которые должны быть в свою очередь также константными параметрами.
Директива условной компиляции #elseиспользуется практически также, как в обычном условном операторе языкаС:if – else. Дополнительная директива условной компиляции#elseв общем случае имеет вид
#if константное_выражение
последовательность операторов программного кода
#else
альтернативная последовательность операторов программного кода
#endif
Аналогично используются директивы #elif(else if), которые в общем случае имеют следующий вид:
#if константное_выражение
последовательность операторов программного кода
#elif 2_ константное_выражение
2_ Я_последовательность операторов программного кода
#elif 3_ константное_выражение
3_ Я_последовательность операторов программного кода
.
.
.
#elif N_ константное_выражение
N_ я_последовательность операторов программного кода
#else
альтернативная последовательность операторов программного кода
#endif
Если константное выражение в директиве #elifистинно (не нулевое, например), то будет компилироваться соответствующая последовательность операторов программного кода. При этом другие выражения в директивах#elifпроверяться уже не будут, в том числе директива#else.
Особенностью рассмотренных конструкций является то, что проверка выражений осуществляется внутри директив #ifи#endif.
В соответствии со стандартом С89 у директив #ifи#elifможет быть не менее 8 уровней вложенности. При вложенности каждая директива#endif,#elseили#elifотносится к ближайшей директиве#ifили#elif[3]. Каждая директива#ifсопровождается директивой#endif.
Директива условной компиляции #ifdefв общем виде выглядит следующим образом:
#ifdef имя_макроса
последовательность операторов
#endif
Директива условной компиляции #ifdefозначает «ifdefined» (если определено) [3]. Последовательность операторов будет компилироваться, если имя макроса было определено ранее с помощью директивы#define.
Директива условной компиляции #ifndefозначает «ifnotdefined» (если не определено) в общем виде выглядит следующим образом:
#ifndef имя_макроса
последовательность операторов
#endif
Последовательность операторов будет компилироваться, если имя макроса еще не определено директивой #define. В директивах#ifdefи#ifndefможно использовать#elseили#elif. Согласно стандарту С89 допускается не менее 8 уровней#ifdefи#ifndef.
Директива #undefудаляет заданное определение имени макроса, то есть «аннулирует» его определение; само имя макроса должно находиться после директивы [3]. Используется в основном для того, чтобы локализовать имена макросов в тех участках кода, где они нужны.
В общем случае эта директива выглядит следующим образом:
#undef имя_макроса
Для того чтобы узнать, определено ли имя макроса, можно использовать директиву #ifв сочетании с оператором времени компиляцииdefined [3], который выглядит следующим образом:
defined имя_макроса
Если имя_макросаопределено, то выражение считается истинным, в противном случае – ложным.
Единственная причина, по которой используется оператор defined, состоит в том, что с его помощью в#elifможно узнать, определено ли имя макроса [3].