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.