Изменение константной переменной с ключевым словом volatile

Я отвечалвопрос и сделал эту тестовую программу.

#include <stdio.h>
int main()
{
    volatile const int v = 5;
    int * a = &v;
    *a =4;
    printf("%d\n", v);
    return 0;
}

Без ключевого слова volatile код оптимизирует (скомпилированный с -O3 apple clang 4.2) изменение var, и оно работает как положено, а переменная const корректно изменяется.

Мне было интересно, знает ли более опытный разработчик C, есть ли часть стандарта, которая говорит, что это небезопасно или UB.

ОБНОВИТЬ: @EricPostpischil дал мне эту цитату стандартов

Программа не может изменять свой собственный объект, определенный с помощью типа с константой, согласно C 2011 (N1570) 6.7.3 6: «Если предпринята попытка изменить объект, определенный с помощью типа с константой, путем использования lvalue с неконстантный тип, поведение не определено ». Внешний агент может изменить объект, имеющий тип с изменяемым типом, согласно 6.7.3 7:« Объект с типом с определенным типом может быть изменен способами, неизвестными реализация или имеют другие неизвестные побочные эффекты

Моя программа нарушает первое правило, но я подумал, что второе правило может освободить программу от первого.

ОБНОВЛЕНИЕ 2:

Объект, имеющий тип volatile-qualified, может быть изменен способами, неизвестными реализации или иметь другие неизвестные побочные эффекты. Поэтому любое выражение, относящееся к такому объекту, должно оцениваться строго в соответствии с правилами абстрактной машины, как описано в 5.1.2.3. Кроме того, в каждой точке последовательности значение, которое в последний раз хранится в объекте, должно соответствовать значению, предписанному абстрактной машиной, за исключением случаев, когда оно изменено неизвестными факторами, упомянутыми ранее.134). -определенной.

Если вы посмотрите на эту цитату, вы увидите, что переменная должна быть оценена в соответствии с определенными правилами, я не прочитал весь раздел5.1.2.3 но я считаю, что это может пролить свет на проблему.

Ответы на вопрос(2)

Ваш ответ на вопрос