comp.lang.c
[Top] [All Lists]

Re: Implementation-defined behaviour

Subject: Re: Implementation-defined behaviour
From: Ben Bacarisse
Date: Fri, 28 Mar 2008 17:37:46 +0000
Newsgroups: comp.lang.c

Ioannis Vranos <ivranos@xxxxxxxxxxxxxxxxxxxxxxxxx> writes:

> Dann Corbit wrote:
>> 
>> --- Module:   foo.c (C)
>>                             _
>>     printf("%d %d\n", n++, n);
>> foo.c(8) : Warning 564: variable 'n' depends on order of evaluation
>
> I wonder a bit about this one. Let's consider a simpler version:
>
>
> #include <stdio.h>
>
> int somefunc(int x)
> {
>       printf("%d\n", x);
>       return x;
> }
>
> int main(void)
> {
>       int x= 1;
>       somefunc(x++);  
>       return 0;
> }
>
> Above, is it well defined that it will be printed "1"?

Yes, all well-defined as far as I can see.  What might be the problem?

> #include <stdio.h>
>
> int somefunc(int x)
> {
>       printf("%d\n", x);
>       return x;
> }
>
> int main(void)
> {
>       int x= 1;
>       somefunc( (x++, somefunc(x)) ); 
>       return 0;
> }
>
> In the above, the expression (x++, somefunc(x)) is evaluated to 2, so I
> assume it is guaranteed that it will print "2".

Well, it will print "2" twice since there are two calls, but again,
all well-defined.  The comma operator has a sequence point between its
two parts so x can be used safely in the right-hard part.

-- 
Ben.

<Prev in Thread] Current Thread [Next in Thread>
Privacy Policy