Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

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

#c #символы #ansi


Вопрос больше философского характера, чем технического. По определению константой
в языке Си назвается такая переменная, которую нельзя изменять по ходу выполнения программы
и такая переменная доступна только для чтения. Вопрос с объявлением числовых констант
отпадает сразу - и так ясно, что имеется в виду 

int const a = 5;


Такое объявление и описание не вызывает особых трудностей для понимания. Что же подразуемвается
под символьной константой? Языком лысого ёжика, это числовой код, которому соответствует
символьное отображение (ASCII-код). Но что здесь является константой; в чем выражается
неизменность? Что каждому символу соответствует данный код? Но как мы его изменим?
Ведь язык не допускает такую конструкцию:

'a' = 666;


Вопрос, на которого я требую ответа: "В чем выражается неизменность символьных констант?"
    


Ответы

Ответ 1



Термин константа в языке С имеет строгое определение. По определению, термин константа обозначает именно и только буквальные литеральные значения: 25, 'f', 0x13, 3.1415. Также термин константа в языке С распространяется на члены перечислений, результат _Alignof и sizeof (с некоторыми исключениями). Это все. Объекты, объявленные со спецификатором const, константами в языке С не являются. Ваше int const a = 5; это ни в коем случае не константа в языке С (!). Это просто, скажем так, "немодифицируемая переменная". Важность правильного понимания термина константа обуславливается тем, что ряд контекстов в языке С требует использования именно констант и константных выражений. Например, инициализатор для статического объекта должен быть именно константой. Ваше a в этой роли использовать не получится int const a = 5; static int x = a; // Ошибка - инициализатор не константен Символьными константами в С называются константы вида 'a' (также сюда можно причислить мультисимвольные константы вида 'abc'). Они не являются lvalue. Не существует никаких корректных конструкций языка С, которые могли бы их изменить. В этом и заключается их "неизменность". То есть вторая часть вашего вопроса действительно содержит правильный ответ. Невозможно "изменить" то, что не является lvalue.

Ответ 2



Символьная константа – это некоторый символ алфавита, заключенный в одиночные кавычки. Значением символьной константы является целое число, равное ASCII коду данного символа. Символьная константа имеет тип int или char и размерно состовляет 16 или 8 бит, соответственно.

Комментариев нет:

Отправить комментарий