Вопрос Часть кода из программы на си. Что выведет printf и почему? int num = 1; printf("%d ", num++ -num);

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