Результат неизвестен: классическое неопределённое поведение. Операнды арифметической операции могут вычисляться в любом порядке. Потому неизвестно, какую часть выражения (num++) - (num) код, сгенерированный компилятором, вычислит раньше.
Если сначала (num++), а потом (num) - поучим в ответе -1
А если сначала (num), а потом (num++) - получим в ответе 0.
P.S. И это одна из причин, почему языки с Си-подобным синтаксисом совершенно не годятся для начального обучения программированию.
Другие языки программирования и технологии
Часть кода из программы на си. Что выведет printf и почему? int num = 1; printf("%d\n", num++ -num);
Максат Салыков
Мой первый язык Си, второй C++ :) - для изучения годятся, просто порог вхождения выше.
Такой подвох можно встретить на тесте квалификации программиста. А преподавателя, который дает такие примеры и рассчитывает на определенный ответ, надо заменять.
Мой Dev-C++ выдал в ответе -1, но это совершенно не обязательно :)
Мой Dev-C++ выдал в ответе -1, но это совершенно не обязательно :)
Максат Салыков
В данной ситуации этим преподавателем являюсь я:) т. е. я знаю ответ на вопрос, просто решил посмотреть, что мне ответят:)
Думал в компиляторе борланда другое покажет, а нет, тот же глюк. Буквально сразу +1 делает, но если написать
int x = num++ -num;
printf("x=%d\n", x);
То все согласно правилам и +1, inc то бишь, поставит законно в конце.

int x = num++ -num;
printf("x=%d\n", x);
То все согласно правилам и +1, inc то бишь, поставит законно в конце.

Так лучше не писать - возможны побочные эффекты и на разных компиляторах и с различной оптимизацией результат может быть разным.
А почему бы вам просто не избегать таких сомнительных конструкций, Си ведь придуман для избежания рутины при программировании на Ассемблере, а не для того чтобы жестко указывать что можно делать а что нельзя, если не нравится наличие неопределенностей, выберите какой-нибудь C#, Паскаль или прочую лабуду.
Максат Салыков
Кто сказал, что мне что-то не нравится? Я просто задал вопрос.
Похожие вопросы
- <<ПОМОГИТЕ! НАПИСАТЬ ПРОГРАММУ НА СИ ИЛИ ПАСКАЛЕ КОТОРАЯ ВЫВОДИТЬ СУММУ ЦИФР ЧИСЛА ОТ 1 ДО N
- объясните как именно работает цикл (int i = 0; i < N; i++) в этом коде, почему нельзя написать i+1, вместо i++
- Дано натуральное число n. Найти и вывести все числа в интервале от 1 до n -1, у которых произведение всех цифр совпадает
- Напишите пожалуйста код простейшей программы вычисления значения 2 в степени N.
- Помогите написать пару программ на СИ
- Помогите с программой на си! Программа в описании
- Нужна помощь)) Есть условие задачи для создания программы на СИ++
- Программа на Си
- Требуется помощь с программа на СИ
- Помогите пожалуйста составить программу на СИ++. Заранее всем БЛАГОДАРЕН!