Вы вызываете неопределенное поведение, изменяя k
и используя его значение в том же операторе перед точкой последовательности.
Хотя любой вывод является допустимым и допустимым, это возможночтобы понять, почему 0 50 0
происходит в этом случае:
Когда вызывается функция C, ее параметры могут оцениваться в любом порядке, но они часто вычисляется в обратном порядке (самый правый первый, самый левый последний).
Это не гарантировано, но часто верно.
Таким образом, 4 параметра оцениваются как:
1.) k>40
(false / 0
, потому что k
равно 35)
2.) k=50
(назначьте 50 на k
и оцените на 50)
3.) k==35
(false / 0
, потому что k равно 50, а не 35)
4.) "\n%d %d %d"
(строкалитерал)
Затем printf
печатает свои параметры: 0, 50, 0