Константы с плавающей точкой
В дополнение к обычному типу (который по умолчанию трактуется как double) можно указать тип float. Например, 2.774F относится к типу float . Это дает экономию памяти. Константы с плавающей точкой будут представлены в памяти процессора более плотно.
Строковые константы
В Турбо Си компилятор распознает символьные строки, размещаемые в тексте на нескольких физических строках, и автоматически выполняет их конкатенацию (сцепление).
Char text[] =”this is a”
“ very long string”
Компилятор выполнит склейку этих строк и сгенерирует в программе массив text требуемого размера.
Константные выражения
В дальнейшем описании термин константное выражение определяет выражение, содержащее одни константы (значения или адреса). Компилятор сразу вычисляет эти выражения до выполнения программы
Пример
#define maxline 1000
char line [maxline +1];
В момент выполнения программы память под массив line уже будет выделена в момент загрузки на 1001 ячейку типа char.
Описания переменных и классы памяти
Описание переменных задается в виде:
[память] тип или тип [память] } и список описателей;
где память - это одно из ключевых слов auto, static, extern, register.
Автоматические переменные (auto) локальны по отношению к каждому блоку (составному оператору). При выходе из блока они уничтожаются, а при входе в блок – для них выделяется память. Статические переменные также локальны по отношению к блоку, но их значения сохраняются даже при выходе из блока и могут использоваться при повторном входе в блок.
Блок или составной оператор в Си ограничивается скобками {…}.
Внешние переменные, объявленные вне функции и на которые, возможно, ссылаются посредством extern, существуют и сохраняют свои значения на протяжении выполнения всей программы. Ключевое слово extern указывает, что переменная декларируется где-либо далее в файле или в другом файле (это указание компилятору и фактически в данном месте прграммы память под переменную не выделяется). Они могут использоваться для передачи значений между отдельно транслируемыми функциями. Фактически, они статически определены. Регистровые переменные хранятся в (быстрых) регистрах, если это возможно; они локальны в блоке и уничтожаются при выходе из блока. Эти переменные позволяют повысить скорость выполнения программы. Описание register выполнимо только при описании автоматических переменных и к формальным параметрам функции.
Пример
int func (a,b);
register int a,b;
{
register int i;
register char d ;
….
}
Если указано register, то int можно опускать (int используется по умолчанию).
Регистры выделяются для переменных компилятором по возможности, т.е. если свободных регистров недостаточно, то используются ячейки памяти.
Список_описателей в декларациях для простых переменных содержит пары вида «имя-переменной инициатор», разделенные запятыми, где инициатор имеет вид:
«= выражение»
Инициатор задает начальные значения для объектов.
1. Все выражения для статических и внешних переменных (имеется в виду явно, без extern) должны быть константными выражениями или выражениями, сводящимися к адресам предварительно описанных переменных (для указательных переменных), при этом допускается смещение от них на величину, заданную константным выражением.
2. Автоматические и регистровые переменные могут инициироваться произвольными выражениями, включающими константы и предварительно описанные переменные и функции.
По умолчанию они не инициализуются и вначале содержат “мусор”.
По умолчанию статические и внешние переменные инициируются нулем - т.е. для int - это 0, для float i double это 0.0, для char - это ‘\0’.
Примеры
int i=1;
float x=3.1e-2, y=3.145;
Вне тела функции эти переменные являются внешними, а в теле функции автоматическими.
Пример
В теле функции или внутри вложенного блока:
double y = func (CONST1)+10;
Описание корректно, если func уже описана и CONST1 константа или вместо CONST1 некоторая уже ранее описанная и инициированная переменная.
Для автоматических и регистровых, если инициатор не указан, то начальное значение не определено (“пусто”).
Ключевое слово static помимо указания статической переменной ограничивает еще и область видимости имени данным файлом. Static применимо и к ltrkfhfwbzv функций.
Дата добавления: 2016-05-26; просмотров: 1259;