Aktualnie pracuję nad starszym kodem C++, pomyślnie skompilowanym z gcc 2.9.X.
Zostałem poproszony o przeniesienie tego starszego kodu do gcc 3.4.X. Większość błędów została łatwo naprawiona, ale ta konkretna zagadka mnie zastanawia.Jakie jest znaczenie podwójnych nawiasów klamrowych inicjujących C-struct?
Kontekst:
struct TMessage
{
THeader header;
TData data;
};
struct THeader
{
TEnum myEnum;
TBool validity;
};
co zostało zrobione:
const TMessage init = {{0}};
/* Later in the code ... */
TMessage message = init;
Moje pytanie (s):
Jaki jest sens {{}} operatora? Czy inicjuje pierwsze pole (nagłówek) do binarnego 0? Czy inicjuje pierwsze pole pierwszej struktury (enum) do (literału) 0?
Pojawia się błąd 3.4.6 z jedną lub dwiema parami nawiasów klamrowych.
Jak ustawić strukturę do liczby 0 bez użycia memsetu?
Z góry dziękuję.
Dlaczego przenosisz swój kod ze starej wersji gcc do innej starej wersji gcc? –
Aby skompilować/połączyć/wykonać na innej platformie. –
Nie wiem o C++. W C nie ma błędu (być może kompilator jest zbyt pomocny, by się pomylić) – pmg