it-swarm.com.de

standardwert für Strukturelement in C

Ist es möglich, Standardwerte für ein Strukturelement 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’
53
user1508893

Struktur ist ein Datentyp . Sie geben einem Datentyp keine Werte. Sie geben Instanzen/Objekten von Datentypen Werte.
Nein, das ist in C nicht möglich. 

Stattdessen können Sie eine Funktion schreiben, die die Initialisierung für die Strukturinstanz übernimmt.

Alternativ können Sie Folgendes tun:

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

typedef struct MyStruct_s MyStruct;

Und dann initialisieren Sie Ihre neuen Instanzen immer als:

MyStruct mInstance = MyStruct_default;
90
Alok Save

Ich stimme mit Als überein, dass Sie zum Zeitpunkt der Definition der Struktur in C .. nicht initialisieren können. Sie können die Struktur jedoch beim Erstellen der Instanz wie unten gezeigt initialisieren.

In C

 struct s {
        int i;
        int j;
    };

    struct s s_instance = { 10 ,20 };

in C++ ist es möglich, einen direkten Wert bei der Definition der unten angegebenen Struktur anzugeben

struct s {
    int i;

    s(): i(10)
    {
    }
};
15
Chirag Desai

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 stattdessen extern 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};

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

1
David Callanan

Sie können eine Funktion verwenden, um struct wie folgt zu initialisieren:

typedef struct
{
    int flag;
} MyStruct;

MyStruct GetMyStruct(int value)
{
    MyStruct My = {0};
    My.flag = value;
    return My;
}

void main (void)
{
    MyStruct temp;
    temp = GetMyStruct(3);
    printf("%d\n", temp.flag);
}

BEARBEITEN:

typedef struct
{
    int flag;
} MyStruct;

MyStruct MyData[20];

MyStruct GetMyStruct(int value)
{
    MyStruct My = {0};
    My.flag = value;
    return My;
}

void main (void)
{
    int i;
    for (i = 0; i < 20; i ++)
        MyData[i] = GetMyStruct(3);

    for (i = 0; i < 20; i ++)
        printf("%d\n", MyData[i].flag);
}
1
Adeel Ahmed

Eine Initialisierungsfunktion für eine Struktur ist eine gute Möglichkeit, ihr Standardwerte zu gewähren:

Mystruct s;
Mystruct_init(&s);

Oder noch kürzer:

Mystruct s = Mystruct_init();  // this time init returns a struct
0
Israel Unterman

Ein anderer Ansatz für Standardwerte. Erstellen Sie eine Initialisierungsfunktion mit demselben Typ wie die struct. Dieser Ansatz ist sehr nützlich, wenn großer Code in separate Dateien aufgeteilt wird. 

struct structType{
  int flag;
};

struct structType InitializeMyStruct(){
    struct structType structInitialized;
    structInitialized.flag = 3;
    return(structInitialized); 
};


int main(){
    struct structType MyStruct = InitializeMyStruct();
};
0
Agriculturist