This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Re: printf() print arguments in reversed order


On 8 December 2016 at 11:46, lhmouse wrote:
>> On 8 December 2016 at 07:13, lhmouse wrote:
>>> It is undefined behavior.
>>>
>>> The evaluation of three parameters in question is (at the moment) unsequenced.
>>> Since each of them  contains a function call, the three function calls are also
>>> unsequenced. The modify-and-read operations inside the function calls are
>>> unsequenced relative to each other. Hence the UB.
>>
>> No, that's incorrect. The functions don't interleave. It's unspecified
>> which order they execute in, but there is no undefined behaviour.
> I did ask a similar question on ##c++ on freenode and it seemed that people couldn't
> agree with each other. There were even opinions suggesting 'unspecified' be replaced
> with 'undefined' because it could be hard to distinguish it from the other.

No comment.

> Personally I think his code is UB because `printf` is a library function call hence
> is considered a 'side effect'. In spite that function calls don't interleave, changes of
> order of evaluation could produce different side effects and the result is undefined.

No, the result is unspecified. That's very different from undefined,
whatever some people on IRC might say.

The standard is clear that each invocation of the function body
completes before the next invocation begins.

This is off-topic for this list though.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]