Выполнение printf с операторами ++ в C

Опубликовано: 15 Сентября, 2022

Рассмотрим следующий оператор на языке C и предскажем его вывод.

printf("%d %d %d", i, ++i, i++);

Этот оператор вызывает неопределенное поведение, ссылаясь как на «i», так и на «i++» в списке аргументов. Не определено, в каком порядке оцениваются аргументы. Разные компиляторы могут выбирать разные порядки. Один компилятор также может выбирать разные порядки в разное время.

Например, следующие три оператора printf() также могут вызвать неопределенное поведение:

Объяснение: Обычно, компиляторы читают параметры printf() справа налево . Таким образом, 'a++' будет выполнен первым, так как это последний параметр первого оператора printf(). Он напечатает 10. Хотя теперь значение было увеличено на 1, поэтому предпоследний аргумент, т.е., напечатает 11. Точно так же будут выполнены и другие операторы.

Note: In pre-increment, i.e., ++a, it will increase the value by 1 before printing, and in post-increment, i.e., a++, it prints the value at first, and then the value is incremented by 1.

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

Эта статья предоставлена Spoorthi Aman . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью write.geeksforgeeks.org или отправить ее по адресу review-team@geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.

C++ C