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