Урок 3.2.1. Имена переменных
3.2.1. Имена переменных
Правила формироиания имен переменных очень просты.
Имя переменной (идентификатор переменной) - это буквенно-цифровая последовательность символов алфавита, начинающаяся с буквы.
Кроме букв и цифр для образования имени переменной можно также использовать символ подчеркивания(_), который в этом случае рассматривается как буква, т.е. может быть первым в последовательности символов, образующих имя.
На длину имени не накладывается ограничений, однако для компилятора Си значащими являются первые 32 символа и, таким образом в имя переменной легко вносить содержательный смысл.
Примеры правильных имен:
Salary Summa_A rezistor1_R25 TEXT_NO
alpha Summa_B rezistor2_R26 TEXT_YES
beta DELTA GAMMA _Name_
Недопустимые имена:
4ТАХА - первый символ не буква;
Vatra.34 - содержит недопустимый символ точку;
сhar - имя совпадает с ключевым словом;
Имена в программе должны быть уникальными и ни в коем случае не должны совпадать с ключевыми словами. Для каждой переменной, фигурирующей в программе под определенным именем, компилятор резервирует область памяти, в которой будет храниться значение переменной.
Следовательно, если переменная будет принимать значения, например, констант типа int, то для нее необходимо зарезервировать 4 байта, а если переменная будет принимать значения констант типа double, то для нее необходимо выделить 8 байтов и т.д.
Если по форме записи константы в программе компилятору ясно сколько байт памяти выделить для ее представления, то имя переменной само по себе не дает компилятору никакой информации о типе ее значения и, следовательно, компилятору неизвестно сколько памяти требуется для хранения значения переменной.
Таким образом, информацию о типах переменных должен сообщить программист, чтобы компилятор знал сколько памяти требуется для каждой переменной и как интерпретировать машинное представление их значений. В Си, как и в других языках программирования, это делается с помощью оператора описания.
Урок 3.2.3. Инициализация переменных
3.2.3. Инициализация переменных
Присваивание переменной начального значения во время компиляции программы называется инициализацией. При описании переменных можно сообщить компилятору о необходимости их инициализации. Если какая либо переменная из списка имен переменных инициализируется, то в списке она должна быть указана в виде:
<имя>=<константа> или <имя>=<константное_выражение> или <имя>=<имя> |
где
<имя> - имя переменной, которой компилятором должно быть установлено начальное значение до выполнения программы; <константа> - определяет конкретное устанавливаемое значение; <константное выражение> – выражение, состоящее только из констант и знаков операций, например, 60+60.
Константные выражения в Си вычисляются во время компиляции, а не во время выполнения программы, поэтому их можно использовать везде, где может стоять константа. Примеры операторов описания с инициализацией переменных:
char backslach = '\\', litera = 'T';
int cows = 32, goats = 14;
float alfa, beta, gamma=1.7e-12;
Обратим внимание на то, что в последнем операторе описания инициализирована только переменная gamma, хотя с первого взгляда может показаться, что все три. Поэтому лучше избегать смешивания инициализируемых и неинициализируемых переменных в одном операторе описания. Кроме того, желательно начальное значение переменной записывать константой соответствующего типа, хотя Си допускает и несовпадение типов. Например, можно допустить такой оператор описания:
int cows = 3.2e+1, goats = 1.4e+1;
который эквивалентен второму оператору вышеприведенной группы, однако при этом компилятор должен затратить дополнительное время на преобразование вещественных констант к целому типу.
Рассмотрим еще несколько примеров инициализации переменных. В комментариях указываются случаи когда форма инициализации допускается только в языке C++.
int i = 5;
int i(5); //только в с++
int a = abs(-3); //используется математическая функция abs
double price = 109.99, discount = 0.16;
double sale_price = price * discount;
double sale_price (price * discount); //только в с++
int val = get_value(); //используется пользовательская функция,
//возвращающая число
Если глобальной статической переменной не задано начальное значение, то она инициализируется нулем. В остальных случаях значение не определено.
Урок 3.2.2. Описание переменных
3.2.2. Описание переменных
Все переменные программы должны быть описаны. Описание переменных обычно осуществляется в начале программы с помощью операторов описания. Остановимся на неформальном понятии оператора.
Под оператором Си понимают некоторую запись, заканчивающуюся символом ;(точка с запятой), смысл которой определяет действия компилятора во время обработки им исходного текста программы или действия процессора во время выполнения программы. К операторам компиляции относятся операторы, характеризующие данные программы, а к операторам выполнения относятся операторы определяющие действия по обработке данных в соответствии с заданным алгоритмом.
Каждый оператор имеет определенный синтаксис и семантику Синтаксис отражает способ записи правильных конструкций оператора, а семантика - это описание тех действий, которые осуществляет оператор. В дальнейшем в тексте пособия синтаксис и семантику операторов Си будем давать путем представления общих форм записи и словесным описанием действий. Оператор описания переменных имеет следующую общую форму записи:
<тип> <список имен переменных>;
где <тип> определяет тип значений, которые могут принимать переменные списка. В качестве <тип> используется одно из ключевых слов int, float, double или char;
<список имен переменных> - это перечисление имен переменных, отделенных друг от друга запятой;
Точка с запятой является признаком конца оператора. Между ключевым словом, определяющим тип переменных и списком их имен должен быть хотя бы один пробел. Операторы описания отрабатываются на этапе компиляции программы и содержат информацию для определения интерпретации каждого имени переменной. Например, в программе имеются следующие операторы описания:
float salary,summa,itog;
int time,count;
char znak,litera;
Эти операторы содержат информацию для компилятора о том, что переменные salary, summa и itog будут принимать вещественные значения типа float в диапазоне от 3.4е-38 до 3.4+38 и для каждой из этих переменных требуется область памяти 4 байта.
Каждой из переменных time, count требуется память 4 байта и эту память следует интерпретировать как целые числа типа int.
Значения переменных с именами znak, litera следует интерпретировать как символьные, т.е. целое число однобайтовой области памяти этих переменных рассматриваются как код соответствующего символа ASCII. Одно описание можно разбить на несколько описаний, например, с целью комментирования физического смысла переменных программы. Операторы:
float salary; /*зарплата в месяц*/
float summa; /*зарплата в год*/
float itog; /*зарплата к выдаче*/
эквивалентны первому оператору вышеприведенных примеров.