On Tue, May 14, 2013 at 5:02 AM, <goodmenzy@xxxxxxxxx> wrote: > On 2013-05-14 04:50:11, Daniel Micay wrote: >> Date: Tue, 14 May 2013 04:50:11 -0400 >> From: Daniel Micay <danielmicay@xxxxxxxxx> >> To: General Discussion about Arch Linux <arch-general@xxxxxxxxxxxxx> >> Subject: Re: [arch-general] gcc: loop do not terminate >> >> On Tue, May 14, 2013 at 3:49 AM, <goodmenzy@xxxxxxxxx> wrote: >> > If this function initArr() is moved to the same cpp file of main(), >> > all optimization level get the same result. >> >> That's the great thing about undefined behaviour, you never know what >> you'll get. It's really not something anyone should be relying on >> though.... there's a well defined, valid way of declaring a >> flexible-length struct member. > > Could you please tell me the "well defined, valid way"? The two ways given in my earlier message, either the standard C99 `foo_t array[];` for the last member or the GNU-ism (non-standard) `foo_t array[0]`. Using `array[1]` and indexing past the end isn't valid C.