позвольте мне взять эту строку
print(max(x++,y),x,y);
Важно отметить, что препроцессор C - это препроцессор макросов (позволяет определять макросы), который преобразует вашу программу перед ее компиляцией.Этими преобразованиями могут быть включение файла заголовка, расширение макроса и т. Д.
Все директивы предварительной обработки начинаются с символа #.Например,
#define PI 3.14
указывает компилятору заменить значение PI на 3,14, где бы он ни находился.
c source code->preprocessor->compiler
, поэтому print (max (x ++, y), x, y)в макросе расширена до
1. prn((x++<y) ? y:x++), prn(x), prn(y)
2. printf("%d",(x++<y)? y:x++), printf("%d",x), printf("%d",y);.
здесь это обрабатывается, вы можете тщательно проверить две вещи здесь
, проверяя
x++<y ,the x++ value is 1
, после чего значение x становится равным 2
, поэтому печатается 2
, а затем при печати мы также написали x ++, что означает здесь x ++ VALUE IS 2, но
после этого значение x равно 3
так что 3 печатается и следует y как 1
, вот как это работает
2. Чтобы дать вам отличную интуицию по преинкременту и постинкременту
позвольте мне взятьпример
int x=2;//value of x is 2
x++;//here x++ value is 2
после выполнения этой строки значение x изменилось на 3
++x//here x++ value is 4 and also x value is 4.