|
|
"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.
|
|