
- •1. Модель компьютера для программиста
- •2.Программное обеспечение. Компиляторы и интерпретаторы
- •3. Создание программ. Жизненный цикл программного обеспечения.
- •4. Транслятор и компоновщик. Библиотека языка Си.
- •5. Базовые элементы языка Си. Алфавит и словарь языка.
- •6. Правила образования идентификаторов. Ключевые слова и имена. Символы операций и разделителей.
- •7. Литералы. Структура предложений в Си.
- •9.Константы и переменные в Си
- •10. Типы данных и их роль в языке Си
- •11. Стандартные скалярные типы данных
- •11.Массивы
- •Структуры
- •14 .Арифметические выражения и операции
- •15. Выражение
- •16. Выражения присваивания.
- •17. Условные и логические операции.
- •18. Выражения с указателями
- •19. Постфиксное выражение
- •21.Приоритет операций и скобочная структура выражений
- •22. Структура программы на Си
- •23. Базовые операторы языка Си
- •24. Условные операторы языка Си.
- •25. Оператор Switch . Организация множественного выбора.
- •26. Оператор return
- •27. Операторы цикла
- •28. Оператор continue как средство управления циклом
- •30. Указатели
- •31. Массивы. Синтаксис объявления.
- •32. Основные свойства массивов
- •Массив и константный указатель
- •34. Символьная строка и массив символов
- •37. Многомерный массив
- •38. Многомерные массивы и указатели
- •39. Директива процессора #define
- •40. Директива #include
- •Предварительная инициализация параметров функции
- •Предварительная инициализация параметров функции 2
- •43. Вызовы функций
- •44. Массивы и параметры
- •48. Объявление функции
- •50. Преобразование основных типов.
- •51. Тип функции
- •52. Стандартные функции библиотеки Си
39. Директива процессора #define
Директива #define начинается с символа # в самой левой позиции. Она может появляться в любом месте исходного файла, а даваемое ею определение имеет силу от места появления до конца файла. Эта директива активно используется для определения символических констант в программах.
В строке первой ставится директива #define. Далее идет выбранная нами аббревиатура, называемая макроопределением. Которое не должно содержать внутри себя пробелы. И наконец, идет строка, называемая строкой замещения, которую представляет макроопределение. Когда процессор находит в программе одно из макроопределений, он почти всегда заменяет его строкой замещения. Этот процесс прохождения от макроопределения до заключительной строки называется макрорасширением. При этом процессор не выполняет вычислений, он только делает предложенные подстановки. Если эквивалентная строка замещения при этом также содержит макроопределения, то они также замещаются. Единственным исключением является макроопределение, находящееся внутри двойных кавычек.
40. Директива #include
Когда препроцессор «распознает» директиву #include, он ищет следующее за ней имя файла и включает его в текущий файл. Директива выдается в двух видах:
#include (stdio.h) имя файла в угловых скобках
#include "mystuff.h" имя файла в двойных кавычках
В операционной системе UNIX угловые скобки сообщают препроцессору, что файл следует искать в одном или нескольких стандартных системных каталогах. Кавычки говорят ему, что сначала нужно смотреть в вашем каталоге (или в каком-то другом, если вы определяете его именем файла), а затем искать в «стандартных» местах.
#include (stdio.h) ищет в системном каталоге
#include "hot.h" ищет в вашем текущем рабочем каталоге
#include "/usr/biff/p.h" ищет в каталоге /usr/biff
В типичной микропроцессорной системе эти две формы являются синонимами и препроцессор ведет поиск на указанном диске.
#include "stdio.h" ищет на стандартном диске
#include < stdio.h> ищет на стандартном диске
#include "a:stdio.h" ищет на диске а
Директива #include не ограничивается заголовочными файлами. Если информация записана в файл sort.c, то можно использовать #include “sort.c” чтобы скомпилировать его совместно с текущей программой.
. Функция. Прототип.
В Си программа строится только из функций. Функция – это независимая совокупность объявлений и операторов, обычно предназначенная для выполнения определенной задачи. Каждая функция должна иметь имя, которое используется для вызова функции. Имя одной из функций main, которая должна присутствовать в каждой Си программе, зарезервировано. В программе могут содержаться и другие функции, причем функция main необязательно должна быть первой, хотя с нее всегда начинается выполнение Си программы.
При вызове функции ей могут быть переданы данные посредством аргументов функции. Функция может возвращать значение. Это возвращаемое значение и есть основной результат выполнения функции, который при выполнении программы подставляется на место вызова функции, где бы этот вызов ни встретился в программе. Однако могут быть определены функции, которые не имеют никаких параметров и не возвращают никакого значения. Тем не менее, действие таких функций может состоять в изменении внешних или статических переменных или выполнении каких-либо других действий, не связанных с данными.
С использованием функций в языке Си связаны три понятия:
• Определение функции
• Объявление функции
• Вызов функции
Определение функции задает
• имя функции
• типы и число ее формальных параметров
• объявления и операторы, которые определяют действия функции
Последовательность объявлений и операторов называется телом функции. В определении функции также может быть задан тип значения, возвращаемого функцией (тип возврата), и класс памяти.
В языке Си нет требования, чтобы определение функции обязательно предшествовало вызову функции. Определения используемых функций могут следовать за определением функции main или могут находиться вообще в другом файле. Однако для того чтобы компилятор мог выполнять проверку соответствия типов передаваемых аргументов типам формальных параметров в определении функции, до вызова функции нужно поместить объявление (прототип) функции.
Прототип функции имеет такой же формат, что и определение функции, с той лишь разницей, что не имеет тела функции и что заголовок функции заканчивается точкой с запятой. Прототип функции задает имя функции, тип и число формальных параметров, тип значения, возвращаемого функцией и класс памяти. Формальные параметры могут иметь имена, но эти имена компилятору не нужны.