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

Reply via email to