Разрешено ли компилятору постоянно сворачивать локальную переменную?

char* str = "HELLO";
char c = str[1];

Имейте в виду, что массивы и строки в C начинаются с индексации 0, а не 1, поэтому «H» - str[0], «E» - str[1], первый «L» - str[2] и и так далее.

19
задан Max Langhof 17 October 2019 в 07:45
поделиться

1 ответ

Я думаю [intro.execution] (номер абзаца варьируются), мог использоваться для объяснения поведения MSVC:

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

стандарт не разрешает устранение чтения через энергозависимый glvalue, но абзац выше мог быть интерпретирован как позволяющий предсказывать значение false.

<час>

BTW, в Стандарте C (N1570 6.2.4/2) говорится, что

объект существует, имеет базовый адрес и сохраняет свою последнюю хранимую сумму в течение его времени жизни. <глоток> 34

<час>

34) В случае энергозависимого объекта, последнее хранилище не должно быть явным в программе.

неясно, могло ли быть неявное хранилище в объект с продолжительностью автоматического хранения в памяти/объектной модели C.

1
ответ дан Language Lawyer 21 October 2019 в 13:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: