Создает ли этот код C99 поведение undefined?
#include <stdio.h>
int main() {
int a[3] = {0, 0, 0};
a[a[0]] = 1;
printf("a[0] = %d\n", a[0]);
return 0;
}
В заявлении a[a[0]] = 1;
, a[0]
читается и изменяется.
Я смотрел проект N1124 стандарта ISO/IEC 9899. Он говорит (в 6.5 выражениях):
Между предыдущей и следующей точками последовательности объект должен иметь измененное значение хранимого значения не более одного раза путем оценки выражения. Кроме того, предыдущее значение должно быть считано только для определения сохраняемого значения.
Не упоминается прочтение объекта для определения самого объекта, который нужно изменить. Таким образом, этот оператор может вызвать поведение undefined.
Однако, я чувствую это странно. Это действительно приводит к поведению undefined?
(Я также хочу знать об этой проблеме в других версиях ISO C.)