So möchte ich eine Definition der Größe eines Arrays in einer Struktur zur Kompilierzeit bekannt haben. Ich möchte auch, dass diese Nummer als Variable für die Benutzerfreundlichkeit später verfügbar ist. Was ich habe, ist folgendes:Strukturelement Array-Größe basierend auf Const Int über Dateien
const int BANANA_ARRAY_SIZE = 10;
typedef struct
{
char bananas[BANANA_ARRAY_SIZE];
int some_other_stuff;
} banana_struct;
Das funktioniert gut. Wenn ich es jedoch in einer .h-Datei habe, die an mehreren Stellen eingefügt wird, beschwert sich der Compiler über die Neudefinition von BANANA_ARRAY_SIZE (was Sinn macht). Also muss ich es als extern deklarieren, damit mehrere Kompilierungseinheiten davon erfahren können.
So, ich habe jetzt
extern const int BANANA_ARRAY_SIZE;
typedef struct
{
//.. same as before
} banana_struct;
und in einer Implementierungsdatei Ich habe
const int BANANA_ARRAY_SIZE = 10;
Aber jetzt ist der Compiler lässt mich nicht die Struktur definieren mehr mit Beschwerden von
fields must have a constant size: variable length array in structure
Gibt es eine Möglichkeit, wie ich erreichen kann, was ich will (haben Länge des Arrays in Variable gespeichert und verwendet zu definieren Struktur)?
Edit:
Als Reaktion auf die Vorschläge statt #define
s zu verwenden, würde ich eher nicht.
Meine Frage ist, wie dieser konstante Wert in einer Variablen gespeichert wird und auch verwendet, um die Länge eines Arrays in einer Struktur festzulegen. Wenn Sie eine weitere Rechtfertigung benötigen, nehmen Sie an, dass ich eine Funktion benötige, die einen Zeiger auf einen int-Wert anwendet. Kann nicht eine Referenz von #define nehmen.
Sie können diese Art der Initialisierung natürlich nur im lokalen Bereich in C durchführen, nicht im globalen Bereich, den Sie versuchen. *** [ref] (http://stackoverflow.com/a/11541168/645128) *** und im selben Beitrag: *** [ref2] (http://stackoverflow.com/a/11542474/645128) *** – ryyker
Bitte lesen Sie meinen aktualisierten Kommentar, den letzten Kommentar zu meiner Antwort. Es passiert nicht für mich _gcc-5.1.0_. –
'#define BANANA_ARRAY_SIZE 10'' Char Bananen [BANANA_ARRAY_SIZE]; const size_t length = BANANA_ARRAY_SIZE; ' – chux