Error "Initialisierungselement ist nicht konstant" beim Versuch, eine Variable mit const @ zu initialisier

Ich erhalte einen Fehler in Zeile 6 (initialisiere my_foo auf foo_init) des folgenden Programms und ich bin mir nicht sicher, warum.

typedef struct foo_t {
    int a, b, c;
} foo_t;

const foo_t foo_init = { 1, 2, 3 };
foo_t my_foo = foo_init;

int main()
{
    return 0;
}

Beachten Sie, dass dies eine vereinfachte Version eines größeren Projekts mit mehreren Dateien ist, an dem ich arbeite. Das Ziel war es, eine einzige Konstante in der Objektdatei zu haben, mit der mehrere Dateien eine Statusstruktur initialisieren können. Da es sich um ein eingebettetes Ziel mit begrenzten Ressourcen handelt und die Struktur nicht so klein ist, möchte ich nicht mehrere Kopien der Quelle. Ich würde es vorziehen, nicht zu verwenden:

#define foo_init { 1, 2, 3 }

Ich versuche auch, portablen Code zu schreiben, daher benötige ich eine gültige Lösung für C89 oder C99.

Hat dies mit den ORGs in einer Objektdatei zu tun? Diese initialisierten Variablen gehen in eine ORG und werden durch Kopieren des Inhalts einer zweiten ORG initialisiert?

Möglicherweise muss ich nur meine Taktik ändern und eine Initialisierungsfunktion veranlassen, dass alle Kopien beim Start erstellt werden. Es sei denn, es gibt andere Ideen da draußen?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage