Язык C: константы и литералы

Предыдущая статья: “Язык С: переменные

Константы — фиксированные величины, которые не изменяются во время выполнения программы. Эти фиксированные величины также называются литералами.

Константы могут относиться к любому из основных типов данных, например:

  • целочисленная константа;
  • константа с плавающей точкой;
  • символьная константа;
  • строковый литерал.

Используются также перечислимые константы.

С константами обращаются так же, как и с обычными переменными. Только значения констант не могут быть изменены после их определения.

Целочисленные литералы

Целочисленный литерал может быть десятичной, восьмеричной или шестнадцатеричной константой. Префикс определяет основание (радикс) целочисленной константы:

  • 0x или 0X — шестнадцатеричной;
  • 0 — восьмеричной;
  • отсутствие префикса — десятичной.

Целочисленный литерал может также иметь суффикс. Он представляет собой комбинацию букв U и L, означающих целое беззнакового и длинного типа (соответственно). Суффикс может быть прописной или строчной буквой и располагаться в любом порядке.

Вот несколько примеров целочисленных литералов:

212         /* верно */
215u /* верно */
0xFeeL /* верно */
078 /* неверно: 8 - не восьмеричное число */
032UU /* неверно: нельзя повторять суффикс */

Ниже приведены другие примеры различных типов целочисленных литералов:

85         /* десятичный */
0213 /* восьмеричный */
0x4b /* шестнадцатеричный */
30 /* целочисленный */
30u /* беззнаковый целочисленный */
30l /* длинный */
30ul /* беззнаковый длинный */

Литералы с плавающей точкой

Литерал с плавающей точкой состоит из целой части, десятичной точки, дробной части и экспоненты. Литералы с плавающей точкой можно представлять либо в десятичной форме, либо в экспоненциальной.

При представлении десятичной формы включают десятичную точку, экспоненту либо и то, и другое; а при представлении экспоненциальной формы — целую часть, дробную часть либо обе части. Знаковая экспонента обозначается символом e или E.

Вот примеры литералов с плавающей точкой:

3.14159       /* верно */
314159E-5L /* верно */
510E /* неверно: неполная экспонента */
210f /* неверно: отсутствует десятичная точка или экспонента */
.e55 /* неверно: отсутствует целая часть или дробь */

Символьные константы

Символьные литералы заключаются в одинарные кавычки; например, ‘x’ может храниться в простой переменной типа char.

Символьный литерал может быть:

  • обычным символом (например, ‘x’);
  • управляющей последовательностью (например, ‘\t’);
  • универсальным символом (например, ‘\u02C0’).

В языке С есть определенные символы, которые имеют особое значение, когда им предшествует обратный слэш, например, новая строка (\n) или табуляция (\t).

Вот список таких кодов управляющей последовательности:

  • \\ — символ \
  • \’ — символ ‘
  • \” — символ “
  • \? — символ ?
  • \a — звуковой сигнал
  • \b — возврат на одну позицию (backspace)
  • \f — смена страницы
  • \n — новая строка
  • \r — возврат каретки
  • \t — горизонтальная табуляция
  • \v — вертикальная табуляция
  • \ooo — восьмеричное число (от одной до трех цифр)
  • \xhh … … — шестнадцатеричное число (из одной или нескольких цифр)

Ниже приведен пример, показывающий несколько символов управляющей последовательности:

#include <stdio.h>

int main() {
   printf("Hello\tWorld\n\n");

   return 0;
}

Когда приведенный выше код компилируется и выполняется, выдается следующий результат:

Hello World

Строковые литералы

Строковые литералы (константы) заключаются в двойные кавычки “”. Строка содержит символы, похожие на символьные литералы:

  • обычные символы;
  • управляющие последовательности;
  • универсальные символы.

Можно разбить длинную строку на несколько строк, используя строковые литералы и разделяя их пробельными символами.

Вот примеры строковых литералов. Все три формы являются идентичными строками:

"hello, dear"

"hello, \
dear"

"hello, " "d" "ear"

Определение констант

В языке С есть два простых способа определения констант:

  • Использование препроцессора #define.
  • Использование ключевого слова const.

Препроцессор #define

Ниже приведена форма использования препроцессора #define для определения константы:

#define identifier value

Следующий пример детально объясняет эту форму:

#include <stdio.h>

#define LENGTH 10   
#define WIDTH  5
#define NEWLINE '\n'

int main() {
   int area;  
  
   area = LENGTH * WIDTH;
   printf("value of area : %d", area);
   printf("%c", NEWLINE);

   return 0;
}

Когда приведенный выше код компилируется и выполняется, выдается следующий результат:

value of area : 50

Ключевое слово const

Префикс const используется для объявления констант с определенным типом следующим образом:

const type variable = value;

Пример, указанный ниже, детально объясняет эту форму:

#include <stdio.h>

int main() {
   const int  LENGTH = 10;
   const int  WIDTH = 5;
   const char NEWLINE = '\n';
   int area;  
   
   area = LENGTH * WIDTH;
   printf("value of area : %d", area);
   printf("%c", NEWLINE);

   return 0;
}

Когда приведенный выше код компилируется и выполняется, выдается следующий результат:

value of area : 50

Обратите внимание: хорошей практикой программирования является определение констант в ЗАГЛАВНЫХ БУКВАХ.

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен

Предыдущая статьяMongoDB: запрос, обновление и удаление документа 
Следующая статьяАвтоматическое пакетирование в React 18