- •Введение
- •Язык программирования Си Элементы языка программирования.
- •Множества символов
- •Буквы и цифры
- •Пробельные символы
- •Знаки пунктуации и специальные символы
- •Операции
- •Константы
- •Целые константы
- •Константы с плавающей точкой
- •Константа-символ
- •Строковые литералы
- •Идентификаторы
- •Ключевые слова
- •Комментарии
- •Лексемы
- •Структура программы
- •Исходная программа
- •Исходные файлы
- •Выполнение программ
- •Время жизни и видимость
- •Классы имен
- •Объявления
- •Спецификаторы типов
- •Область значений величин
- •Деклараторы
- •Деклараторы массивов, функций и указателей
- •Составные деклараторы
- •Объявления переменной
- •Объявление простой переменной
- •Объявление перечисления
- •Объявления структур
- •Объявление совмещений
- •Объявление массива
- •Объявление указателей
- •Объявление функций
- •Объявление классов
- •Классы памяти
- •Объявления переменной на внешнем уровне
- •Объявление переменной на внутреннем уровне
- •Объявление функции на внешнем и внутреннем уровнях
- •Инициализация
- •Базовые типы и типы указателей
- •Составные типы
- •Строковые инициализаторы
- •Объявления типов
- •Типы структур, совмещений и перечислений
- •Объявления 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
- •Управление нумерацией строк
Оператор break
Синтаксис:
break;
Выполнение:
Оператор break прерывает выполнение операторов do, for, switch или while, в которых он появляется. Управление передается оператору, следующему за прерванным. Появление оператора break вне операторов do, for, switch, while приводит к ошибке.
Внутри вложенных операторов оператор break завершает только операторы do, for, switch или while. Чтобы передать управление вне вложенной структуры, могут быть использованы операторы return и goto.
Пример
for (i=0; i<LENGTH-1;i++)
{
for (j=0;j<WIDTH-1;j++)
{
if (lines [i][j] == '\0')
{
length [i]=j;
break;
}
}
}
В вышеприведенном примере построчно обрабатывается массив lines переменно-длинных строк. Оператор break прерывает выполнение внутреннего оператора for после того, как найден символ конца строки (\0). При этом элементу length [i] одномерного массива присваивается длина в байтах i-ой строки. Управление передается внешнему оператору for. Переменная i инкрементируется и процесс повторяется до тех пор, пока значение i не станет больше или равно константе LENGTH-1.
Составной оператор
Синтаксис:
{
[<declaration>]
.
.
.
<statement>
[<statement>]
.
.
.
}
Выполнение:
Действия при выполнении составного оператора состоят в том, что выполнение его операторов осуществляется в порядке их появления, за исключением случаев, когда очередной оператор явно передает управление в другое место.
Синтаксические правила и семантика объявлений - <declaration>, которые могут появиться в заголовке составного оператора, описаны в разделе 4 "Объявления".
Пример
if (i>0)
{
linne [i]=x;
x++;
i--;
}
Типично появление составного оператора в качестве тела другого оператора, например, такого, как оператор if. В приведенном примере, если i больше нуля, то последовательно выполняются оператры составного оператора.
Помеченные операторы
Подобно другим операторам Си, любой оператор в составном операторе может быть помечен. Поэтому передача управления внутрь составного оператора возможна. Однако, передачи управления внутрь составного оператора опасны, когда составной оператор содержит объявления, которые инициализируют переменные. Объявления в составном операторе предшествуют выполняемым операторам, так что передача управления непосредственно на выполняемый оператор внутри составного оператора минует инициализацию. Результат будет непредсказуем.
Оператор continue
Синтаксис:
continue;
Выполнение:
Оператор cоntinue передает управление на следующую итерацию в оператoрах цикла do, for, while, в которых он может появиться. Оставшиеся операторы в теле вышеперечисленных циклов при этом не выполняются. Внутри do или while циклов следующая итерация начинается с перевычисления выражения do или while операторов. Для оператора for следующая итерация начинается с выражения цикла оператора for.
Пример:
while (i-->0)
{
x=f(i);
if (x==1)
continue;
y=x*x;
}
Тело оператора выполняется , если i>0. Сначала f(i) присваивается x, затем, если x равно 1, то выполняется оператор continue. Остальные операторы тела игнорируются и выполнение возобновляется с заголовка цикла, т.е. вычисляется выражение i-->0.