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

Re: Implementation-defined behaviour

Subject: Re: Implementation-defined behaviour
From: Ben Bacarisse
Date: Sat, 29 Mar 2008 21:50:19 +0000
Newsgroups: comp.lang.c

"Herbert Rosenau" <os2guy@xxxxxxxxxxxxx> writes:

> On Fri, 28 Mar 2008 17:37:46 UTC, Ben Bacarisse <ben.usenet@xxxxxxxxx>
> wrote:
>
>> 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".
>
> No, It gives undefined behavior.

I think you've misread the code.  There is a comma operator and only
one argument to somefunc (in both calls). 

-- 
Ben.

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