====== переменные и литералы ======
Переменные бывают глобальными, локальными, статическими и внешними. См [[storage_classes]] / [[..:basic_concepts:scope|]]
===== Переменные и их базовые типы =====
int a; // объявление (случайное значение)
int a = 10; инициализация при объявлении
имена идентификаторов регистрозависимы и могут состоять из следующих символов: ''a-z, A-Z, 0-9, _''. См [[..:basic_concepts:identifier|идентификаторы]]
^ Тип данных ^ Для 16‑битных ^ Для 32‑битных ^ Для 64‑битных ^ Описание ^ Диапазон ^
| char | 1 | 1 | 1 | Символьный и целочисленный | [0; 255] или [-128; 127] |
| short [int] | 2 | 2 | 2 | Целочисленный | [-32768; 32767] |
| int | 2 | 4 | 4 | Целочисленный | [-32768; 32767] или [-2147483648; 2147483647] |
| long [int] | 4 | 4 | 8 | Целочисленный | зависит от платформы (см. столбец) |
| long long [int] | 8 | 8 | 8 | Целочисленный | зависит от реализации (обычно 64‑битный, см. столбец) |
| float | 4 | 4 | 4 | Вещественный | см. IEEE‑754 single (примерно ±3.4e38, ~6–9 значащих цифр) |
| double | 8 | 8 | 8 | Вещественный | см. IEEE‑754 double (примерно ±1.7e308, ~15–17 значащих цифр) |
| long double | 10 | 10 | 10 | Вещественный | платформа‑зависимо (часто 80‑битное расширение на x86, иначе совпадает с double) |
для получения размера переменных используеться оператор ''sizeof()'', возвращающий размер в байтах типа size_t. Он так же может принимать тип в качестве аргумента.
Тип результата оператора sizeof - size_t фактически является псевдонимом для типа unsigned long long
==== Модификаторы signed и unsigned ====
* ''unsigned'' – беззнаковый;
* ''signed'' – знаковый (появился в стандарте ANSI C90).
Обратите внимание, когда я говорю о модификаторах signed и unsigned, то отмечаю именно целочисленные типы данных. Дело в том, что вещественные типы float и double всегда знаковые и __применять к ним эти модификаторы нельзя__
==== Модификатор const ====
Объект с модификатором const становиться константным, тоесть неизменяемым.
const float PI = 3.14;
===== Числовые и символьные литералы =====
int dec, hex, oct;
dec = 100;
hex = 0x1FA;
oct = 0123;
double d1, d2, d3, d4;
d1 = 10.0;
d2 = -7.;
d3 = 1e2; // <число>e<степень десятки>
d4 = 5e-3;
При желании мы можем явно указать компилятору тип числового литерала. Для этого используются следующие суффиксы:
* U или u – использование модификатора unsigned в определении литерала;
* L или l – использование типа long при определении литерала;
* LL или ll – использование типа long long при определении литерала.
int dec_i, dec_ui, dec_l, dec_ul;
float var_f;
dec_i = 100; // тип литерала int
dec_ui = 100U; // тип литерала unsigned int
dec_l = 100L; // тип литерала long
dec_ul = 100UL; // тип литерала unsigned long
var_f = 100.0f // тип литерала float