From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Tue, 21 May 2024 00:13:25 +0300 From: "Dmitry V. Levin" To: devel@lists.altlinux.org Message-ID: <20240520211323.GA4622@altlinux.org> References: <20240520203750.GA4067@imap.altlinux.org> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240520203750.GA4067@imap.altlinux.org> Subject: Re: [devel] =?koi8-r?b?09TSwc7OwdEg0NLPwszFzcEg0yAgZ2NjPw==?= X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 May 2024 21:13:25 -0000 Archived-At: List-Archive: List-Post: On Mon, May 20, 2024 at 11:37:50PM +0300, Vladislav Zavjalov wrote: > Всем привет! > > Локализовал какую-то странную проблему в C коде, > не понимаю, это проблема с моим пониманием С или с компилятором. > > Код ниже: число печатается кусочками по два байта. > Это перестает работать при компиляции с -O2 или -O3. Это -fstrict-aliasing, который включён в -O2. $ gcc -Wall -O2 -Wstrict-aliasing=2 a.c && ./a.out a.c: In function 'main': a.c:9:33: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] 9 | printf("%#x\n", ((uint16_t*)&v1)[i]); | ^~~ a.c:6:12: warning: 'v1' is used uninitialized [-Wuninitialized] 6 | uint32_t v1 = 0x12345678; | ^~ -- ldv