On Fri, Jul 29, 2011 at 02:20:17PM -0300, Adir Kuhn wrote: > Hello guys, > > while I'm studing some c codes i found this page: > http://www.nicksays.co.uk/2009/05/awesome-c-exam-question/ > > and this code: > > #include <stdio.h> > int func (int a, int b) { > static int c = 1; > return a + b * (c *= -1);} > int main () { > int a = 2, b = 3; > int c = func(a, b); > > a *= a++; > b *= ++b;
I'm no expert in C, but my understanding is that the two expressions immediately above are UNDEFINED because there is only one sequence point, but the objects are modified twice (*= and ++). See http://c-faq.com/expr/seqpoints.html gcc appears to agree with me via the -Wsequence-point flag: joey@banshee:0$cat > a.c #include <stdio.h> int func (int a, int b) { static int c = 1; return a + b * (c *= -1); } int main () { int a = 2, b = 3; int c = func(a, b); a *= a++; b *= ++b; printf("%d %d %d %d\n", a, b, c, func(a, b)); } joey@banshee:0$gcc -Wsequence-point a.c a.c: In function ‘main’: a.c:12:4: warning: operation on ‘a’ may be undefined a.c:13:4: warning: operation on ‘b’ may be undefined If my interpretation is correct, I'm not sure how much time we need to spend around the question. -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php