#define cube(x) x*x*x
main(){
int a=3,b;
b=cube(a++);
printf("%d %d",a,b);
}
cube(3++)
a++ * a++ * a++
++ (postfix) has higher precedence and associativity is left to right
(a++) * (a++) * (a++)
first leftmost a++ is calculated but non-modified value will be returned. So now a = 4 but 3 is returned
3 * (a++) * (a++)
now second a++ is calculated but non-modified value will be returned. So now a = 5 but 4 is returned
3 * 4 * (a++)
last a++ is calculated but non-modified value will be returned. So now a = 6 but 5 is returned
$3 * 4 * 5 = 60$
so b = 60 and a = 6
Output : $6 \ 60$
Edit : As Shaik mentioned in comments a++ * a++ * a++ is undefined. So order of execution of all 3 (a++) is not defined. Still answer won't change and will be 6 60. Answer is Undefined Behavior if there is an option "Undefined Behavior ".