Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does int a=1, b=a++; invoke undefined behavior?

Does int a=1, b=a++; invoke undefined behavior? There is no sequence point intervening between the initialization of a and its access and modification in the initializer for b, but as far as I can tell, initialization is not "modification" of the object; an initializer is specified to give the "initial value" of the object. Per 6.7.8 Initialization, paragraph 8:

An initializer specifies the initial value stored in an object.

and it seems reasonable to take "initial" as being sequenced before any access to the object. Has this issue been considered before, and is there an accepted interpretation?

like image 281
R.. GitHub STOP HELPING ICE Avatar asked Apr 25 '13 15:04

R.. GitHub STOP HELPING ICE


1 Answers

It doesn't invoke undefined behaviour. In 6.7.6 (3), it is stated

A full declarator is a declarator that is not part of another declarator. The end of a full declarator is a sequence point.

that the end of a full declarator is a sequence point.

int a = 1, b = a++;
     //  ^ end of full declarator
like image 114
Daniel Fischer Avatar answered Nov 14 '22 06:11

Daniel Fischer