Deutsch   English   Français   Italiano  
<vsbo2p$1p5ov$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: Muttley@DastardlyHQ.org
Newsgroups: comp.lang.c++
Subject: Re: Pre-main construction order in modules
Date: Sun, 30 Mar 2025 15:30:34 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 22
Message-ID: <vsbo2p$1p5ov$1@dont-email.me>
References: <vsb12i$2mv42$1@dont-email.me> <vsbl21$1jsvi$1@dont-email.me>
Injection-Date: Sun, 30 Mar 2025 17:30:34 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="8aae5d893046018cf9e7a8a9a0bf0a2b";
	logging-data="1873695"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19kgz+aDl2forhmtk83CEDl"
Cancel-Lock: sha1:PQ2PonnNxpSj1JManZgtjVtp4eY=
Bytes: 1963

On Sun, 30 Mar 2025 10:38:57 -0400
James Kuyper <jameskuyper@alumni.caltech.edu> wibbled:
>On 3/30/25 4:57 AM, Muttley@DastardlyHQ.org wrote:
>> I was curious about the order in which objects get constructed in modules
>> before main gets called. It seems with both Clang and gcc its the order in
>> which the modules were linked together to form the runnable binary so if
>> the link order was m1.o m2.o then anything in m1 would get constructed first.
>
>> Vice verca if you switch the order.
>> 
>> Is this codified in the standard or is it left up to compiler and linker
>> writers to decide how they order this?
>
>Section 6.9.3.3 does in fact impose many constraints on the sequence in
>which non-local objects with static storage duration get initialized.
>However, all of the sequence requirements are only between objects
>defined in the same translation unit. Also, it's implementation-defined
>which of those initializations occur before the start of main().

Initialising global objects before main is an absolute must otherwise how
are you expected to use them safely? They're not in the code for decoration.