В языке Си имеет очень важное значение имеет место в программе, в котором происходит объявление переменной. Это определяет область существования переменной (эту область называют областью видимости). Программа не будет компилироваться, если не описать все используемые переменные.
Различают локальные и глобальные переменные. Локальные переменные существуют и в теле функции или оператора управления. Локальные переменные на языке Си (но не С++) объявляются в начале блока – после открывающей фигурной скобки. Только после этого можно использовать их имена в выражениях и операторах. Область видимости локальной переменной – до соответствующей закрывающей фигурной скобки.
Глобальные переменные объявляются вне функций и существуют от точки объявления до конца программы. Соответственно, значение глобальной переменной можно использовать во любом месте программы.
Рассмотрим пример
#include <stdio.h>
int i=1; /* объявление и инициализация глобальной переменной */
float f; /* объявление глобальной переменной */
|
|
void fun(void); /* прототип функции пользователя */
void main(void)
{
int k,n; /* объявление локальных переменных */
float g1; /* объявление локальной переменной */
...
}
void fun(void) /* описание функции пользователя */
{
int j=5; /* объявление локальной переменной */
char ch; /* объявление локальной переменной */
...
}
В программе объявлены глобальные и локальные переменные, а также помимо функции main() используется подпрограмма fun(). Глобальные переменные i и f можно использовать в обеих функциях. Значения локальных переменных r, n и g1 можно использовать только в теле функции main(), а переменных j и ch – в теле функции fun().
Константы
В языке Си представляют собой постоянные параметры, константы, которые не изменяются в ходе исполнения программ. Константы могут быть для любого типа данных. Примеры констант приведены в табл. 2.2.
Пример констант различных типов данных
Таблица 2.2.
Имя константы | Тип | Примеры |
символ | char | ’A’ ‘ч’ ‘\n’ |
целое | int | 10 -9345 32000 |
длинное целое | long | 100000 5L |
вещественное двойной точности | double | 3.14 1.23456789 –8.9е-40 |
Константы типа символ
Можно задавать в двух формах в виде отдельного символа, который записывается в одиночных кавычках ('А ') или в виде целого числа (55). При этом необходимо помнить, что константы, например, '0' и 0 описывают различные данные.
В языке Си существуют символьные константы, обозначающие специальные управляющие символы, такие как: перевод строки, звуковой сигнал, горизонтальная табуляция. Эти символы нельзя ввести с клавиатуры. Для их использования вначале записывается символ '\' – обратный слеш. Например, символ, означающий перевод строки, описывается так: '\n', горизонтальная табуляция – '\t'. Перечень основных специальных символов приведен в таблице 2.3.
|
|
Специальные символы
Таблица 2.3.
Обозначение | Назначение |
\n | перевод строки |
\r | возврат каретки |
\t | горизонтальная табуляция |
\v | вертикальная табуляция |
\b | стирание символа, возврат на шаг |
\f | перевод страницы |
\” | двойная кавычка |
\’ | апостроф, одиночная кавычка |
\\ | обратный слеш |
\0 | нулевой символ, конец строки |
\а | звуковой сигнал |
\? | символ вопроса |
Целые константы
Эти константы не имеют десятичной точки и порядка числа. В программировании очень часто используются числа, записанные в других системах счисления - двоичной, восьмеричной и шестнадцатеричной. Для двух последних систем в языке Си есть специальная форма записи:
– для восьмеричных целых констант перед числом записывается ноль, и далее используются цифры 0…7;
– для шестнадцатеричных целых констант перед числом устанавливаются два символа 0х и далее используются цифры 0... 9, а также буквы латинского алфавита A, B, C, D, E, F обозначающие соответственно числа от 10 до 15. Примеры целых констант:
восьмеричные: 01 077 012340
шестнадцатеричные: 0х51 0х6А0 0xF59В
Вещественные константы
на языке Си по умолчанию воспринимаются программой как числа типа double. Их можно записать в двух формах:
– в виде числа с десятичной точкой, например, 0.1, 15.189;
– в научном виде (экспоненциальной форме), в котором вместо показателя основания записывается символ Е (или е), например: 1.1Е–10, –5е2 (что эквивалентно математической форме записи чисел 1.1×10–10 и –5×102).
Различие между числами float и double состоит не только в большем диапазоне последних, но и в более точном значении чисел типа double – верными являются 15...16 значащих цифр.
Макроопределения
Наряду с использованием в тексте программ констант в языке Си существует возможность применения макроопределений (макросов). Макроопределение устанавливает соответствие между именем и определённым значением. Для использования макросов существует несколько предпосылок. Если в программе используется одна и та же константа несколько раз в различных местах программ, то становится желательным использовать соответствующее макроопределение. Другой вариант применения макросов - использование хорошо понимаемых имен.
В общем случае форма записи макроопределения следующая:
#define <ИмяМакроса> <3аменяемоеВыражение>
где <ИмяМакроса> – любое разрешенное имя переменной, при этом желательно использовать заглавные буквы (что облегчает чтение программы). Примеры макросов:
#define NUNBER 1OO
#define LEFT 75
#define RIGHT 77
#define ENTER 13
#define SPACE 0x20
#define PI 3.14159
После определения этих макросов в заголовке, в тексте программы можно использовать имена NUMBER, LEFT, RIGHT и т.д. На этапе создания исполняемого файла (точнее в фазе препроцессора, выполняемой до компиляции) происходит замена имен макросов на соответствующие им значения. Например, если в тексте программы встречаются имена NUMBER, то происходит замена этого имени на значение 100.