Является ли доступным два летучих вещества в одном утверждении законно в более новой C? - PullRequest
0 голосов
/ 06 декабря 2018

Я столкнулся с предупреждением «неопределенное поведение» с компилятором IAR для RL78 (v. 1.40.6) со следующим кодом:

static volatile int x[2] = {1, 2};
int test(){
    return x[0]+x[1];
}

Предупреждение [Pa082]: неопределенное поведение:порядок изменяемого доступа не определен в этом выражении C: \ sandbox \ test.c 32

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

Тем не менее, я вижу, что приведенный выше код не является проблемой для более новых компиляторов, таких как GCC 8. Может ли кто-нибудь указать мне на изменение в стандарте, которое делает доступ к двум изменчивым переменным в одном выражении законным

1 Ответ

0 голосов
/ 07 декабря 2018

Доступ к двум изменчивым переменным в одном выражении не является незаконным, но поскольку стандарт не указывает, в каком порядке оцениваются операнды оператора +, язык не гарантирует определенного порядка доступа, таким образомx[0] с последующими x[1] и x[1] с последующим x[0] одинаково верны, и компилятор может выбрать любой из них.Поскольку это может не соответствовать ожиданиям пользователя, компилятор IAR выдает предупреждение.

...