немного истории строковых литералов в словах Ричи.
в основном о происхождении и эволюции строковых литералов из K & R 1.
Надеюсь, это прояснит одну или две вещи о константных и строковых литералах.
"От: Деннис Ритчи
Тема: Re: История вопроса: Строковые литералы.
Дата: 02 июня 1998
Группы новостей: comp.std.c
В то время, когда комитет C89 работал, доступный для записи
строковые литералы не были "устаревшим кодом" (Марголин) и какой стандарт
существовало (K & R 1) было довольно явно (A.2.5), что
Строки были просто способом инициализации статического массива.
И, как отметил Барри, были некоторые (mktemp) процедуры
который использовал этот факт.
Я не был на совещании комитета по
точка, но я подозреваю, что утилита BSD для возни
код ассемблера для перемещения инициализации строк
текст вместо данных, и осознание того, что большинство
буквальные строки на самом деле не были перезаписаны, было больше
важнее, чем какая-то очень ранняя версия gcc.
Где, я думаю, комитет мог что-то упустить
не в состоянии найти формулировку, которая объяснила
поведение строковых литералов в терминах конст.
То есть, если «abc» является анонимным литералом типа
константный символ [4]
тогда почти все его свойства (включая
возможность делать только для чтения и даже делиться своим хранилищем
с другими вхождениями того же буквального) почти
объяснил.
Проблема с этим была не только относительно
места, на которых действительно были написаны строковые литералы, но
более важно, разработка возможных правил для назначений
указатели на константу, в частности для фактической функции
аргументы. Реально комитет знал, что все
сформулированные ими правила не могли требовать обязательного
диагностика для каждого функционала («строки») в существующем мире.
Поэтому они решили оставить "..." из обычного массива символов
введите, но скажите, что нужно было не писать поверх него.
Кстати, эта заметка не предназначена для чтения как бекас
по формулировке в С89. Это очень трудно получить вещи
как правильный (связный и правильный) и пригодный для использования (последовательный
достаточно, достаточно привлекательно).
Dennis
"