- •Введение
- •Язык программирования Си Элементы языка программирования.
- •Множества символов
- •Буквы и цифры
- •Пробельные символы
- •Знаки пунктуации и специальные символы
- •Операции
- •Константы
- •Целые константы
- •Константы с плавающей точкой
- •Константа-символ
- •Строковые литералы
- •Идентификаторы
- •Ключевые слова
- •Комментарии
- •Лексемы
- •Структура программы
- •Исходная программа
- •Исходные файлы
- •Выполнение программ
- •Время жизни и видимость
- •Классы имен
- •Объявления
- •Спецификаторы типов
- •Область значений величин
- •Деклараторы
- •Деклараторы массивов, функций и указателей
- •Составные деклараторы
- •Объявления переменной
- •Объявление простой переменной
- •Объявление перечисления
- •Объявления структур
- •Объявление совмещений
- •Объявление массива
- •Объявление указателей
- •Объявление функций
- •Объявление классов
- •Классы памяти
- •Объявления переменной на внешнем уровне
- •Объявление переменной на внутреннем уровне
- •Объявление функции на внешнем и внутреннем уровнях
- •Инициализация
- •Базовые типы и типы указателей
- •Составные типы
- •Строковые инициализаторы
- •Объявления типов
- •Типы структур, совмещений и перечислений
- •Объявления typedef
- •Имена типов
- •Выражения и присваивания
- •Введение
- •Операнды
- •Константы
- •Идентификаторы
- •Вызовы функций
- •Индексные выражения
- •Выражение выбора структурного элемента
- •Выражения с операциями
- •Выражения в скобках
- •Type-cast выражения
- •Константные выражения
- •Операции
- •Обычные арифметические преобразования.
- •Операции дополнения
- •Операция адресации и разадресации
- •Операция sizeof
- •Мультипликативные операции
- •Аддитивные операции
- •Операции сдвига
- •Операции отношений
- •Побитовые операции
- •Логические операции
- •Операция последовательного вычисления
- •Условная операция
- •Операции присваивания
- •Lvalue-выражения
- •Унарные инкремент и декремент
- •Простое присваивание
- •Составное присваивание
- •Старшинство и порядок выполнения
- •Побочные эффекты
- •Преобразования типов
- •Преобразование типов при присваивании
- •Преобразования type-cast
- •Преобразования, выполняемые операциями
- •Преобразования при вызовах функций
- •Операторы
- •Введение
- •Оператор break
- •Составной оператор
- •Оператор continue
- •Оператор do
- •Оператор-выражение
- •Оператор for
- •Goto и помеченные операторы
- •Оператор if
- •Оператор null
- •Оператор return
- •Оператор switch
- •Оператор while
- •Функции
- •Введение
- •Определение функции
- •Класс памяти
- •Тип возврата
- •Формальные параметры
- •Тело функции
- •Объявления функции
- •Вызовы функций
- •Фактические аргументы
- •Вызовы с переменным числом аргументов
- •Рекурсивные вызовы
- •Директивы препроцессора и указания компилятору
- •Поименованные константы и макросы
- •Директива # define
- •Директива #undef
- •#Include файлы
- •Условная компиляция
- •Директивы #if, #elif, #else, #endif
- •Директивы #ifdef и #ifndef
- •Управление нумерацией строк
Оператор while
Синтаксис:
while (<expression>)
<statement>
Выполнение:
Тело оператора while выполняется нуль или более раз до тех пор, пока выражение <expression> станет ложным (равным нулю). Вначале вычисляется выражение <expression>. Если <expression> изначально ложно, то тело оператора while не выполняется и управление передается на следующий оператор программы. Если <expression> является истиной (не нуль), то выполняется тело оператора. Перед каждым следующим выполнением тела оператора <expression> перевычисляется. Повторение выполнения тела оператора происходит до тех пор, пока <expression> остается истинным. Оператор while может также завершиться при выполнении операторов break, goto, return внутри тела while.
Пример
while (i>=0)
{
string1 [i] = string2 [i];
i--;
}
В вышеприведенном примере копируются символы из string2 в string1. Если i больше или равно нулю, то string2[i] присваивается индексной переменной string1[i] и i декрементируется. Когда i становится меньше нуля,то выполнение оператора while завершается.
Функции
Введение
Функция - это независимая совокупность объявлений и операторов, обычно предназначенная для выполнения определенной задачи. Программы на Си состоят по крайней мере из одной функции main, но могут содержать и больше функций. В подразделах данного раздела описывается как определять, объявлять и вызывать функции Си.
Определение функции специфицирует имя функции, ее формальные параметры, объявления и операторы, которые определяют ее действия. В определении функции может быть задан также тип возврата и ее класс памяти.
В объявлении задается имя, тип возврата и класс памяти функции, чье явное определение произведено в другой части программы. В объявлении функции могут быть также специфицированы число и типы аргументов функции. Это позволяет компилятору сравнить типы действительных аргументов и формальных параметров функции. Объявления не обязательны для функций, возвращающих величины типа int. Чтобы обеспечить корректное обращение при других типах возвратов, необходимо объявить функцию перед ее вызовом.
Вызов функции передает управление из вызывающей функции к вызванной. Действительные аргументы, если они есть, передаются по значению в вызванную функцию. При выполнении оператора return в вызыванной функции управление и, возможно, значение возврата передаются в вызывающую функцию.
Определение функции
Определение функции специфицирует имя, формальные параметры и тело функции. Оно может также определять тип возврата и класс памяти функции. Синтаксис определения функции следующий:
[<sc-specifier>][<type-specifier>]<declarator> ([<parameter-list>])
{
<function-body>
}
Спецификатор класса памяти <sc-specifier> задает класс памяти функции, который может быть или static или extern. Спецификатор типа <type-specifier> и декларатор <declaration> специфцируют тип возврата и имя функции. Список параметров <parameter-list> - это список (возможно пустой) формальных параметров, которые используются функцией и задают типы формальных параметров. Тело функции <function-body> - это составной оператор, содержащий объявления локальных переменных и операторы. В следующих разделах детально описываются составные части определения функции.