Ist es möglich, Standardwerte für einige Strukturmitglieder festzulegen? Ich habe Folgendes versucht, aber es würde einen Syntaxfehler verursachen:
typedef struct
{
int flag = 3;
} MyStruct;
Fehler:
$ gcc -o testIt test.c
test.c:7: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
test.c: In function ‘main’:
test.c:17: error: ‘struct <anonymous>’ has no member named ‘flag’
Sie können eine Initialisierungsfunktion für die Struktur erstellen.
– sgarizvi
4. Dezember 2012 um 15:58 Uhr
Nicht in C. Sie können eine Funktion erstellen, die eine Struktur mit den gewünschten Werten zurückgibt.
– Vaughn Cato
5. Dezember 2012 um 5:35 Uhr
Wenn Sie es erstellen, können Sie die Werte wie folgt initialisieren: stackoverflow.com/questions/749180/default-values-in-ac-struct
– Fantastischer Herr Fuchs
5. Dezember 2012 um 5:36 Uhr
Für C++-Strukturen können Sie Standarddaten im Konstruktor initialisieren
– Zac
25. August 2020 um 12:56 Uhr
Alok Speichern
Struktur ist ein Datentyp. Sie geben einem Datentyp keine Werte. Sie geben Instanzen/Objekten von Datentypen Werte.
Also nein, das ist in C nicht möglich.
Stattdessen können Sie eine Funktion schreiben, die die Initialisierung für die Strukturinstanz durchführt.
Und dann initialisieren Sie Ihre neuen Instanzen immer wie folgt:
MyStruct mInstance = MyStruct_default;
Wenn ich ein globales Array habe: ‘MyStruct arr[MAX_SIXE];’, wie kann die Funktion verwendet werden? (HINWEIS: Ich kann keine init()-Funktion haben, die alle Mitglieder durchläuft und das Flag setzt)
– Benutzer1508893
5. Dezember 2012 um 5:54 Uhr
MyStruct_default sollte als const deklariert werden.
– Ludin
5. Dezember 2012 um 7:40 Uhr
Danke für deine Antwort. Am Ende habe ich eine Code-Sandbox erstellt, um sie online zu testen, hatte anfangs Probleme, alles zu verbinden, hoffe, das hilft jemand anderem: ideone.com/knQ7xS
Sie können Makros verwenden definieren und initialisieren Ihre Instanzen. Dies erleichtert Ihnen jedes Mal, wenn Sie eine neue Instanz definieren und initialisieren möchten.
typedef struct
{
int id;
char* name;
}employee;
#define INIT_EMPLOYEE(X) employee X = {.id = 0, .name ="none"}
und wenn Sie in Ihrem Code eine neue Instanz mit dem Mitarbeitertyp definieren müssen, rufen Sie dieses Makro einfach so auf:
INIT_EMPLOYEE(emp);
Scheint nicht gut zu sein, wenn Sie Parameter übergeben möchten, die die Anforderungen nicht erfüllen.
– Benutzer3402040
1. Dezember 2016 um 16:57 Uhr
Chirag Desai
Ich stimme Als zu, dass Sie zum Zeitpunkt der Definition der Struktur in C nicht initialisieren können. Sie können die Struktur jedoch zum Zeitpunkt der Erstellung der Instanz initialisieren, wie unten gezeigt.
In C,
struct s {
int i;
int j;
};
struct s s_instance = { 10, 20 };
In C++ ist es möglich, der Definition der Struktur, wie unten gezeigt, einen direkten Wert zu geben
Und dann müssen Sie nur daran denken, die Standardinitialisierung durchzuführen, wenn Sie eine neue Mitarbeitervariable deklarieren:
employee foo = employee_default;
Alternativ können Sie Ihre Mitarbeiterstruktur einfach immer über eine Fabrikfunktion erstellen.
David Callanan
Erstellen Sie eine Standardstruktur, wie in den anderen Antworten erwähnt:
struct MyStruct
{
int flag;
}
MyStruct_default = {3};
Der obige Code funktioniert jedoch nicht in einer Header-Datei – Sie erhalten eine Fehlermeldung: multiple definition of 'MyStruct_default'. Um dieses Problem zu lösen, verwenden Sie extern stattdessen in der Header-Datei:
Sie können eine Initialisierungsfunktion für die Struktur erstellen.
– sgarizvi
4. Dezember 2012 um 15:58 Uhr
Nicht in C. Sie können eine Funktion erstellen, die eine Struktur mit den gewünschten Werten zurückgibt.
– Vaughn Cato
5. Dezember 2012 um 5:35 Uhr
Wenn Sie es erstellen, können Sie die Werte wie folgt initialisieren: stackoverflow.com/questions/749180/default-values-in-ac-struct
– Fantastischer Herr Fuchs
5. Dezember 2012 um 5:36 Uhr
Für C++-Strukturen können Sie Standarddaten im Konstruktor initialisieren
– Zac
25. August 2020 um 12:56 Uhr