Есть ли конкретная документация для поведения "i = i--" в gcc? - PullRequest
3 голосов
/ 25 августа 2010

Еще раз, наши самые любимые "я = я--" вопросы. В С99 у нас есть:

6.5 Выражения # 2: между предыдущей и следующей точкой последовательности объект должен иметь свое сохраненное значение изменено самое большее один раз

70) В этом пункте !! неопределенными !! выражения выражения такие как

i = ++i + 1;

Но для неопределенного поведения могут быть варианты от случайного вывода до «выполнения программы задокументированным способом» (c99 3.4.3)

Итак, вопрос:

Документирует ли gcc поведение для операторов i = i ++, i = i-- и т. Д.?

Фактический код

int main(){int i=2;i=i--;return i;}

Ответы [ 4 ]

5 голосов
/ 25 августа 2010

GCC не документирует это поведение.Страница Параметры предупреждений упоминает проблемы точек последовательности в -Wsequence-point, но не намекает на четко определенную семантику для нарушений.

В GCC есть хороший список C Реализация определенаПоведение , но я также не смог найти здесь никакой ссылки на эту проблему.

1 голос
/ 25 августа 2010

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

1 голос
/ 25 августа 2010

Это остается за внутренней реализацией, чтобы решить, что она делает. Вы можете использовать -S и проверить сгенерированный код, чтобы определить точную последовательность событий.

0 голосов
/ 25 августа 2010

с какой стати вы хотите это сделать?Шутки в сторону.Мне любопытно.

...