- •Введение
- •Язык программирования Си Элементы языка программирования.
- •Множества символов
- •Буквы и цифры
- •Пробельные символы
- •Знаки пунктуации и специальные символы
- •Операции
- •Константы
- •Целые константы
- •Константы с плавающей точкой
- •Константа-символ
- •Строковые литералы
- •Идентификаторы
- •Ключевые слова
- •Комментарии
- •Лексемы
- •Структура программы
- •Исходная программа
- •Исходные файлы
- •Выполнение программ
- •Время жизни и видимость
- •Классы имен
- •Объявления
- •Спецификаторы типов
- •Область значений величин
- •Деклараторы
- •Деклараторы массивов, функций и указателей
- •Составные деклараторы
- •Объявления переменной
- •Объявление простой переменной
- •Объявление перечисления
- •Объявления структур
- •Объявление совмещений
- •Объявление массива
- •Объявление указателей
- •Объявление функций
- •Объявление классов
- •Классы памяти
- •Объявления переменной на внешнем уровне
- •Объявление переменной на внутреннем уровне
- •Объявление функции на внешнем и внутреннем уровнях
- •Инициализация
- •Базовые типы и типы указателей
- •Составные типы
- •Строковые инициализаторы
- •Объявления типов
- •Типы структур, совмещений и перечислений
- •Объявления 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
- •Управление нумерацией строк
Goto и помеченные операторы
Синтаксис:
goto <name>;
.
.
.
<name>: <statement>
Выполнение:
Оператор goto передает управление непосредственно на оператор, помеченный <name>. Помеченный оператор выполняется сразу после выполнения оператора goto. Если оператор с данной меткой отсутствует или существует более одного оператора, помеченных одной и той же меткой, то это приводит к ошибочному результату. Метка оператора имеет отношение только к оператору goto. Если помеченный оператор встречается в любом другом контексте, то он выполняется без учета метки.
Пример
if (errorcode>0)
goto exit;
.
.
.
exit:return (errorcode);
В примере оператор goto передает управление на оператор, помеченный меткой exit, когда происходит ошибка.
Формат меток
Метка - это простой идентификатор, синтаксис которого описан в разделе 2.4. Каждая метка должна быть отлична от других меток в той же самой функции.
Оператор if
Синтаксис:
if (<expression>)
{
<statement 1>
}
[else
{
<statement 2>
}]
Выполнение:
Тело оператора if выполняется селективно, в зависимости от значения выражения <expression>. Сначала вычисляется выражение. Если значение выражения истина (не нуль), то выполняется оператор <statement 1>. Если выражение ложно, то выполняется оператор <statement 2>, непосредственно следующий за ключевым словом else. Если выражение <expression> ложно и предложение else ... опущено, то управление передается на выполнение оператора, следующего за оператором if.
Пример
if (i>0)
y=x/i;
else
{
x=i;
y=f(x);
}
В примере выполняется оператор y=x/i;, если i больше нуля. Если i меньше или равно нулю, то значение i присваивается переменной x и возврат функции f(x) присваивается переменной y.
Вложения
Си не поддерживает оператор "else if", но тот же самый эффект достигается посредством сложенных операторов if. Оператор if может быть вложен в предложение if или предложение else другого оператора if. Когда операторы if вкладываются, то используются фигурные скобки, чтобы сгруппировать составные операторы, которые проясняют ситуацию.
Если фигурные скобки отсутствуют, то компилятор может принять неверное решение, сочетая каждое else с более близким if, у которого отсутствует else.
Примеры
/****** example 1 ******/
if (i>0) /* without braces */
if (j>i)
x=j;
else
x=i;
/****** example 2 ******/
if (i>0)
{ /* with braces */
if (j>1)
x=j;
}
else
x=i;
В первом примере else ассоциируется с внутренним оператором if. Если i меньше или равно 0, то нет значения, которое присваивается x.
Во втором примере фигурные скобки ограничивают внутренний оператор if и тем самым делают предложение else частью внешнего оператора if. Если i меньше или равно нулю, то значение i присваивается переменной x.
Оператор null
Синтаксис:
;
Выполнение:
Оператор null - это оператор, состоящий только из точки с запятой. Он может появиться в любом месте, где требуется оператор. Когда выполняется оператор null, ничего не происходит.
Пример
for (i=0; i<10; linee [i++]=0);
Такие операторы, как do, for, if, while, требуют, чтобы в теле оператора был хотя бы один оператор. Оператор null удовлетворяет требованиям синтаксиса в случаях, когда не требуется тела оператора. В приведенном примере третье выражение оператора for инициализирует первые 10 элементов массива line нулем. Тело оператора включает оператор null, т.к. нет необходимости в других операторах.
Помеченный оператор null
Оператор null, подобно любому другому Си оператору, может быть помечен меткой. Чтобы пометить объект, который не является оператором, такой как закрывающаяся фигурная скобка составного оператора, можно вставить перед объектом помеченный оператор null.