Содержание

Глоссарий

l-значение
l-значение — выражение, которое обозначает объект. Термин происходит от выражения присваивания

L = R

в котором левый операнд L оператора присваивания должен допускать изменение. Наиболее часто используемая форма l-значения — идентификатор объекта.

Если вычисление выражения E приводит к указателю, то *E является l-значением, которое обозначает объект, на который указывает E. В частности, если E декларирован как «указатель на int», то оба, и E, и *E являются l-значениями, которые имеют соответственно типы «указатель на int» и int.

lint
lint — программа, часто поставляемая с компилятором, которая определяет места в программе, которые компилятор может посчитать синтаксически верными, но которые не являются тем, что хотел сделать программист.
void
Тип void — специальный тип, который означает «неконкретный тип». Объект, который является «указателем на void», нельзя использовать для указания на что-либо без предварительного приведения к соответствующему типу.

Ключевое слово void также используется в качестве типа функции, которая не возвращает никакого значения, и в качестве списка параметров функции, которая не требует параметров.

автоматическая продолжительность хранения
Объект с автоматической продолжительностью хранения создаётся, когда вызывается функция, в которой он определён, и уничтожается, когда функция возвращает управление.
агрегат
Составной тип — это либо массив, либо структура. Термин агрегеат отсылает к тому факту, что массивы и структуры состоят из других типов.
адрес
Адрес — место в памяти компьютера. Каждое участок памяти (байт) имеет свой адрес, по которому к нему можно обращаться. Указатель является адресом.
аргумент
Аргумент при вызове функции является выражением, чьё значение присваивается параметру функции. Функция может изменять параметр, при этом аргумент останется без изменений. Этот метод передачи часто называют передача по значению.

Аргументом может быть указатель на объект, в этом случае функция может изменять объект, на который он указывает, не изменяя значение аргумента (указатель).

байт
Байт — наименьшая единица хранения, которая может быть представлена уникальным адресом, он обычно способен хранить один символ.

Большинство процессоров, включая семейство Intel 80x86, имеют в байте 8 бит.

беззнаковый
Беззнаковое значение может быть только неотрицательным.

Ключевое слово unsigned можно использовать с типами char, short int, int и long int.

библиотечная функция
Библиотечная функция — функция предоставляемая вместе с компилятором C, которая выполняет некоторый общие задачи. Стандарт языка C описывает набор функций, которые должны поставляться со всеми компиляторами. Будет ли это действительно функция, зависит от реализации.
бит
Бит — наименьшая возможная единица информации, представляющая одно из двух значений, 0 или 1. Если бит равен 0, то говорят, что он сброшен. Если он равен 1, то говорят — установлен.

Бит нельзя представить адресом, он является частью байта, у которого есть адрес.

Большинство процессоров, включая семейство Intel 80x86, имеют в байте 8 бит.

битовое поле
Битовое поле — тип, в котором содержится указанное число битов.
блок
Блок является частью функции, он начинается { и заканчивается }. Блок содержит декларации объектов и команды, которые производят некоторые действия. Он также называется составной командой.
вложенность
Вложенность — помещение чего-то внутри чего-то. Например, команда for может как часть своего тела содержать другую команду for. При этом говорят, что второй for вложен внутрь первого. Другая форма вложенности возникает, когда исходный файл включён другим файлом.
возвращаемое значение
Возвращаемое значение — значение, которое возвращает функция при помощи команды return.
выравнивание
На некоторых компьютерах такие объекты как целые, указатели и числа с плавающей точкой могут храниться только начиная с определённого адреса (например, только с чётного). Попытка сослаться на объект, который не выровнен, может закончиться неудачей. Для других компьютеров выравнивание не обязательно, но может увеличить скорость выполнения программы.

Компиляторы C выравнивают все объекты, которым это требуется, добавляя при необходимости заполняющие символы внутрь структур и массивов. Однако программа всё-таки может попытаться обратиться к неверно выровненному объекту.

По умолчанию компиляторы Watcom C/16 и C/32 не производят выравнивание объектов. Для того, чтобы компилятор производил выравнивание, можно использовать ключ командной строки или прагму pack.

Подробности см. «User's Guide».

декларация
Декларация описывает атрибуты объекта или функции, такие как продолжительность хранения, режим связи и тип. Память для объекта выделяется, когда встретится его определение. Декларация функции описывает её аргументы и их типы, она также называется прототипом. Декларация функции не содержит команд, которые будут исполняться при её вызове.
декремент
Декремент числа — вычитание (единицы) из него. Декремент указателя — уменьшение его значения на размер объекта, на который он указывает.
заголовочный файл
Заголовочный файл содержит исходный текст на C, обычно прототипы функций, определения структур и объединений, связь с определёнными вне объектами и макроопределения. Заголовочный файл включается при помощи директивы препроцессора #include.
знаковый
Знаковое значение может быть положительным и отрицательным.

Ключевое слово signed можно использовать вместе с типами char, short int, int и long int.

идентификатор
Идентификатор — последовательность символов, начинающаяся с буквы или подчёркивания, и состоящая из букв, цифр и символов подчёркивания. Идентификатор используется в качестве имени объекта, тега, функции, typedef, метки, макро или члена структуры или объединения.
индекс
Индекс — число, которое используется для доступа к элементу массива. Оно имеет целое значение. Первый элемент массива имеет индекс равный нулю.
инициализация
Инициализация объекта — акт присвоения ему начального значения. Это можно сделать, давая начальное значение объекту при его объявлении, либо явно присваивая ему значение.
инкремент
Инкремент числа — добавление (единицы) к нему. Инкремент указателя — увеличение его значения на размер объекта, на который он указывает.
исключительное состояние
Исключительное состояние возникает, когда операнд оператора имеет недопустимое значение. К исключительному состоянию приводит деление на нуль.
ключевое слово
Ключевое слово — идентификатор, который зарезервирован компилятором. Ключевое слово нельзя использовать в качестве имени объекта или какого-либо другого идентификатора.
команда
Команда описывает действия, которые должна сделать программа. Этим они отличаются от деклараций объектов.
комментарий
Комментарий — последовательность символов вне стрингового литерала или символьной константы, которая начинается /* и заканчивается */. В комментарии ищется только закрывающая */, поэтому комментарии не могут содержать в себе вложенные комментарии.
компилятор
Компилятор — программа, которая читает файл, содержащий команды языка программирования, и транслирует их в инструкции, которые понимает компьютер.

Например, компилятор C транслирует команды описанные в этой книге.

константа null-указатель
Значение нуль, когда используется в том месте, где ожидается указатель, рассматривается в качестве null-указателя, чьё значение означает, что указатель не указывает на что-либо. Компилятор интерпретирует нуль как специальное значение и не гарантирует, что реальное значение указателя будет равно нулю.

Часто для представления null-указателя используется макро NULL.

косвенность
Косвенная адресация происходит, когда указатель на объект используется для доступа к этому объекту. Для косвенной адресации используется либо унарная форма оператора *, либо оператор ->.
лексема
Лексема — единица, которая используется препроцессором при поиске макро и компилятором при просмотре исходных строк. Каждый идентификатор, константа и комментарий являются одной лексемой, а все другие символы составляют отдельную.
макро
Существует два типа макро. Макро подобное объекту является идентификатором, который заменяется на последовательность лексем. Макро подобное функции выглядит как вызов функции, который заменяется последовательностью лексем.
массив
Массив — множество объектов одинакового типа, сгруппированных в смежной памяти. Обращение к элементам массива производится при помощи индексирования.
метка
Метка — идентификатор, который связан с конкретной командой в функции. Она может быть использована с командой goto. default — специальная метка, которая используется в команде switch.
модуль
Называемый в стандарте языка C единицей трансляции, модуль обычно является файлом, который содержит исходный код на C. Модуль может включать в себя заголовочные и другие исходные файлы, условно компилироваться (при помощи директив препроцессора), иметь декларации объектов и/или функций. Модуль — то, что рассматривается в качестве исходного файла C после включения файлов и условной компиляции.
незавершенный тип
Незавершённый тип — тот, который декларирован, но его размер или структура ещё не определены. Примером может послужить массив, который декларирован без указания количества элементов. Тип void — также незавершённый, но он никогда не может быть завершён.
неопределённое поведение
Неопределённое поведение возникает, когда используется ошибочная конструкция программы или неверные данные, а стандарт ничего не говорит о поведении в такой ситуации. Возможные действия при неопределённом поведении включают игнорирование проблемы, поведение документированным образом, прекращение компиляции с сообщением об ошибке и прекращение выполнения с сообщением об ошибке.
нулевой символ
Символ, у которого все биты установлены в нуль ограничивает стринг и называется нулевым символом. В стринге он представляется эскейп-последовательностью \0, а в символьной константе — '\0'.
область видимости
Область видимости идентификатора означает часть модуля, где на него можно ссылаться. На объект с блочной видимостью можно ссылаться только внутри блока, в котором он определён. На объект с файловой областью видимости можно ссылаться из любого места в файле, в котором он определён.
объединение
Структура — тип, который является набором именованных членов определённого (возможно различного) типа, которые располагаются, начиная с одного адреса в памяти.
объект
Объект — набор байтов в памяти компьютера, используемый для хранения значений. Размер и назначение объекта определяется его типом. Скалярный объект часто называют переменной.
округление
Значение округляется, когда представление, которое используется при его хранении, не является точным. Значение может быть увеличено или уменьшено до ближайшего, которое можно представить точно.
определение
Определение объекта — то же, что и декларация, за исключением того, что для объекта при его определении выделяется память. Определение функции включает команды, которые будут исполняться при её вызове.
параметр
Параметр функции — «локальная копия» значений аргументов, определённых при вызове функции. Любые изменения значений параметров не влияют аргументы функции. Однако аргумент (и, следовательно, параметр) может быть указателем на объект, и в этом случае функция может изменить объект, на который указывает параметр.
переменная
Переменная — в основном то же, что и объект. Чаще этот термин используют для ссылки на скалярные объекты.
переносимый
Переносимое программное обеспечение написано таким образом, что относительно просто сделать так, что оно заработает на другом аппаратном обеспечении или под управлением другой операционной системы.
плавающая точка
Число с плавающей точкой — член подмножества математического множества вещественных чисел, содержащее (возможно) мантиссу и экспоненту. Тип с плавающей точкой представлен одним из ключевых слов: float, double или long double.
побочный эффект
Побочный эффект изменяет значение объекта, вызывая изменения в состоянии программы. Наиболее частый побочный эффект — присвоение, при котором изменяется значение левого операнда.
препроцессор
Препроцессор:
приведение
Привести объект к типу — явно конвертировать его в другой тип.
приоритет
Приоритет — набор неявных правил для определения порядка вычисления выражения при отсутствии скобок.
присвоение
Присвоение — сохранение значения в объекте, которое обычно делается при помощи оператора =.
пространство имени
Пространство имени является категорией идентификаторов. Один и тот же идентификатор может появляться в различных пространствах имён. Например, идентификатор одновременно может быть меткой, именем объекта, тегом и членом структуры или объединения, так как каждый из них имеет своё пространство имени. Синтаксис использования идентификатора показывает, к какой категории он относится.
реализационно-зависимое поведение
Поведение, определяемое реализацией зависит от того, как конкретный компилятор C работает в определённых случаях. Все компиляторы C должны документировать своё поведение в этой ситуации.
регистр
Регистр — специальная часть компьютера и обычно не является частью адресуемой памяти. Регистры могут хранить значения и обычно быстрее в использовании, чем память.

Ключевое слово register используется при декларации объекта с автоматической продолжительностью хранения для информирования компилятора о том, что этот объект будет интенсивно использоваться, и компилятор должен оптимизировать доступ к нему, возможно поместив его в регистр компьютера.

рекурсия
Рекурсия происходит, когда функция вызывает саму себя напрямую, либо, вызывая другую функцию, которая вызовет её. См. рекурсия. (!)
связь
На объект с внешней связью можно ссылаться из любого модуля программы. На объект с внутренней связью можно ссылаться только внутри модуля, в котором он определён. На объект без связи можно ссылаться только внутри блока, где он определён.
скаляр
Скаляр — объект, который не является структурой, объединением или массивом. В своей основе это — одиночная переменная, такого типа, как символьный, любого целого или с плавающей точкой.
символьные константы
Символьная константа — обычно один символ (возможно триграф или эскейп-последовательность) внутри одиночных кавычек (например, 'a', '??(' и '\n').

Компиляторы Watcom C/16 и C/32 допускают символьные константы с одним, двумя, тремя и четырьмя символами.

составная команда
Составная команда — часть функции, которая начинается { и заканчивается }. Она содержит декларации объектов и команды, которые производят некоторые действия. Составная команда также называется блоком.
статическая продолжительность хранения
Объект со статической продолжительностью хранения создаётся при запуске программы и уничтожается при её завершении. Любое значение, которое в нём хранится, будет тем же, пока не будет явно изменено.
стринг
Стринг — последовательность символов, ограниченная нулевым символом. Обращение к стрингу производится при помощи адреса его первого символа.
стринговый литерал
Стринговый литерал — последовательность нуля или более символов, заключённая в двойные кавычки. Он является константой. Смежные стринговые литералы объединяются в один. Значение стрингового литерала — последовательность символов в кавычках плюс нулевой символ (\0), который помещается в конце.
строка
Строка — то же, что и строка, которую мы видим в текстовом редакторе. Строку в текстовом редакторе можно назвать физической строкой. Несколько физических строк можно быть объединить в одну логическую (или просто «строку»), поместив в конце всех, кроме последней, символ \. C не требует, чтобы команда располагалась в одной строке, поэтому символ \ обычно необходим только при определении макро.
структура
Структура — тип, который является набором именованных членов определённого (возможно различного) типа, которые располагаются в смежных и последовательно увеличивающихся адресах памяти.
тег
Тег — идентификатор, который именует структуру, объединение или перечисление. В декларации

enum nums { ZERO, ONE, TWO } value;

nums является тегом перечисления, а value объектом декларированного перечислимого типа.

тип
Тип объекта описывает его размер и то, как объект интерпретируется при использовании его значения. Он может включать в себя информацию о наличии знака у значения и диапазоне значений, которые может хранить объект.
точка следования
Точка следования — точка, в которой должны быть завершены все побочные эффекты предшествующих вычислений, и никакие побочные эффекты последующих вычислений не имеют место. Обычно программисту не нужно заботиться о точках следования, так как это — работа компилятора, обеспечить завершение побочных эффектов в нужное время.
указатель
Про объект, который содержит адрес другого объекта, говорят, что он является указателем на этот объект.
функция
Функция — набор деклараций и команд, которым предшествует декларация имени функции и её параметры, а также возможное возвращаемое значение. Команды описывают серию шагов, которые производятся после вызова функции и до её завершения.
целое
Целое — тип, который является подмножеством математического множества целых. Он представлен ключевым словом int и имеет несколько вариаций, которые включают signed char, unsigned char, short signed int, short unsigned int, signed int, unsigned int, long signed int и long unsigned int.
целочисленное расширение
Объект или константа типа char, short int, битовое поле int, или объект перечислимого типа, которые используются в выражении, расширяются до int (если int достаточно велик для хранения всех значений меньшего типа) или до unsigned int.