C - Доступ к неконстантным через объявление const

Разрешен ли стандартом C доступ к объекту, отличному от const , через объявление const ? Например. Гарантируется ли следующий код компилировать и выводить 23 и 42 на стандартной платформе?

единица трансляции A:

int a = 23;
void foo(void) { a = 42; }    

единица трансляции B:

#include <stdio.h>

extern volatile const int a;
void foo(void);

int main(void) {
    printf("%i\n", a);
    foo();
    printf("%i\n", a);
    return 0;
}

В ISO / IEC 9899: 1999 я только что нашел (6.7 .3, абзац 5):

Если предпринята попытка изменить объект, определенный с типом, квалифицированным константой, посредством использования значения lvalue с типом, не квалифицированным константой, поведение будет неопределенным.

Но в приведенном выше случае объект не определен как const (а просто объявлен).

ОБНОВЛЕНИЕ

Наконец-то я нашел его в ISO / IEC 9899: 1999.

6.2.7, 2

Все объявления, которые относятся к одному и тому же объекту или функции, должны иметь совместимый тип; в противном случае поведение не определено.

6.7.3, 9

Чтобы два квалифицированных типа были совместимыми, оба должны иметь идентично квалифицированную версию совместимого типа; [...]

Итак, это неопределенное поведение.

6
задан undur_gongor 13 January 2012 в 10:25
поделиться