Standardwert für Strukturmitglied in C

Lesezeit: 4 Minuten

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

Benutzeravatar von Alok Save
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.

Alternativ könnten Sie Folgendes tun:

struct MyStruct_s 
{
    int id;
} MyStruct_default = {3};

typedef struct MyStruct_s MyStruct;

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

    – HoldOffHunger

    28. Juni 2018 um 23:46 Uhr

Benutzeravatar von MOHAMED
MOHAMED

Sie können es nicht auf diese Weise tun

Verwenden Sie stattdessen Folgendes

typedef struct
{
   int id;
   char* name;
}employee;

employee emp = {
.id = 0, 
.name = "none"
};

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

Benutzeravatar von Chirag Desai
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

struct s {
    int i;
    s(): i(10) {}
};

Du kannst tun:

struct employee_s {
  int id;
  char* name;
} employee_default = {0, "none"};

typedef struct employee_s employee;

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.

Benutzeravatar von David Callanan
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:

struct MyStruct
{
    int flag;
};

extern const struct MyStruct MyStruct_default;

Und in der c Datei:

const struct MyStruct MyStruct_default = {3};

Hoffe, das hilft jedem, der Probleme mit der Header-Datei hat.

  • Ein Kommentar ein paar Jahre später: Es ist wahrscheinlich sinnvoller, wenn Sie dies direkt in der Header-Datei tun könnten.

    – David Callanan

    9. Januar 2020 um 22:01 Uhr

Benutzeravatar von pevik
pevik

Wenn Sie verwenden gcc du kannst Geben designated initializers bei der Objekterstellung.

typedef struct {
    int id = 0;
    char *name = "none";
} employee;

employee e = {
    .id = 0;
    .name = "none";
};

Oder verwenden Sie einfach die Array-Initialisierung.

employee e = {0 , "none"};

  • Ein Kommentar ein paar Jahre später: Es ist wahrscheinlich sinnvoller, wenn Sie dies direkt in der Header-Datei tun könnten.

    – David Callanan

    9. Januar 2020 um 22:01 Uhr

Benutzeravatar von Bogdan Alexandru
Bogdan Alexandru

Mehr noch, um die vorhandenen Antworten zu ergänzen, können Sie ein Makro verwenden, das einen Struct-Initialisierer verbirgt:

#define DEFAULT_EMPLOYEE { 0, "none" }

Dann in deinem Code:

employee john = DEFAULT_EMPLOYEE;

1422350cookie-checkStandardwert für Strukturmitglied in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy