Sujet : Re: C89 "bug"
De : bc (at) *nospam* freeuk.com (bart)
Groupes : comp.lang.cDate : 13. Dec 2024, 19:39:26
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vjhv0u$3i840$1@dont-email.me>
References : 1 2 3 4 5
User-Agent : Mozilla Thunderbird
On 13/12/2024 15:41, Thiago Adams wrote:
Em 12/13/2024 12:01 PM, Kaz Kylheku escreveu:
On 2024-12-13, Thiago Adams <thiago.adams@gmail.com> wrote:
unfortunately, this solution does not work if we have two objects.
>
union U {
double d;
int i;
};
>
union U u1 = { .d=2.2 };
union U u2 = { .i=1 };
>
Idea: have several declarations of the union in different translation
units.
>
/* translation unit for u1 */
union U {
double d;
int i;
};
extern union U u1 = { 2.2 };
>
/* translation unit for u2 */
union U {
int i;
double d;
};
extern union U u2 = { 1 };
>
another solution could be call a function that initializes before main.
extern union U u1;
void before_main()
{
u1.d = 1.2;
}
I assume the initialisation is at file-scope.
Then your suggestion could work, if you can arrange for it to be called.
But I think that will be a problem: this can occur in some arbitrary module compiled at a different time from the one containing the program's main(): either earlier, or later.
How will the compiler know which function(s) needs to be called from main(), when it translated the module containing main?
I can think of an approach, but it's not simple, and may be over-kill if this is something that is infrequently encountered.