In Cprogramming.com I found this piece of code:
int a,b;
scanf("%d %d",&a,&b);
b=(a+b)-(a=b);
printf("%d %d",a,b);
It is claimed to be a tip/trick to “swap without using temporary”. My tests on Linux gcc prove it. However, wouldn’t the order how different compilers or platforms computing this expression matters here? Is it safe to use such code?
No. In the expression
(a+b)-(a=b)there is no sequence point betweenabeing written to andabeing read in the(a+b)sub-expression to determine the value to be stored tobso the behaviour is undefined.