Danke Danke:  0
Dislikes Dislikes:  0
Ergebnis 1 bis 2 von 2

Thema: Child eines Struct allgemein definieren

  1. #1

    Registriert seit
    05.12.15
    Danke (erhalten)
    6
    Gefällt mir (erhalten)
    17

    Standard Child eines Struct allgemein definieren

    Anzeige
    Hey, angenommen ich habe einen struct über Arrays:

    Code:
    struct Point {
        uint32_t X[11];
        uint32_t Y[11];
    }
    Nun möchte ich diesen Point mit ".Y = {1}" initialisieren.

    D,h, ich möchte tatsächlich:
    Code:
    typedef struct Point SetPoint;
    mit self.Y = {1} haben. Geht das ohne for-Schleife?


    MWE
    Code:
    #include <stdio.h>
    #include <stdint.h>
    
    typedef uint32_t arr[11];
    
    struct Point {
       arr X;
       arr Y; 
    };
    
    typedef struct Point ElPoint;
    
    #define SetPoint(P) ElPoint P = { .X= {0}, .Y={1} } 
    
    
    int main()
    {
        SetPoint(P);
    
        for(uint8_t i=0; i<11; i++){
            printf("%08X ", P.Y[i]);
        }
        printf("\n");
    
        return 0;
    }
    Das klappt soweit. Nur kann ich nun nicht mehr, wie vorher, "ElPoint P,Q,R,...;" nutzen. (was aber echt das geringere Übel ist) Falls jemand einen besseren Weg hat, würde ich mich freuen


    Nächstes Hindernis:
    Angenommen ich möchte ein Struct Parent initialisieren und mit Werten füttern. Dafür würde ich ja eine Funktion anbieten. Sagen wir mal: InitPoint. Mit obiger "#define" Version, klappt das natürlich nicht.
    Geändert von Shalec (12.11.17 um 19:58 Uhr)

  2. #2

    Registriert seit
    09.03.04
    Danke (erhalten)
    1
    Gefällt mir (erhalten)
    9

    Standard

    Anzeige
    Eine Möglichkeit ist die folgende:
    Code:
    #include <stdio.h>
    #include <stdint.h>
    
    typedef uint32_t arr[11];
    
    struct Point {
       arr X;
       arr Y;
    };
    
    typedef struct Point ElPoint;
    
    #define POINT_DEFAULT_VALUE    { .X = {0}, .Y = {1} }
    
    int main(){
        ElPoint P = POINT_DEFAULT_VALUE, Q = POINT_DEFAULT_VALUE, R = POINT_DEFAULT_VALUE;
        for(uint8_t i=0; i<11; i++){
            printf("%08X ", P.Y[i]);
        }
        printf("\n");
        return 0;
    }
    Oder, falls das ganze ohne Makros passieren soll:
    Code:
    #include <stdio.h>
    #include <stdint.h>
    
    typedef uint32_t arr[11];
    
    struct Point {
       arr X;
       arr Y;
    };
    
    typedef struct Point ElPoint;
    
    const static ElPoint POINT_DEFAULT = { .X = {0}, .Y = {1} };
    
    int main(){
        ElPoint P = POINT_DEFAULT_VALUE, Q = POINT_DEFAULT_VALUE, R = POINT_DEFAULT_VALUE;
        for(uint8_t i=0; i<11; i++){
            printf("%08X ", P.Y[i]);
        }
        printf("\n");
        return 0;
    }
    Noch als Randbemerkung: Ich würde das
    Code:
    typedef uint32_t arr[11];
    weglassen und das struct so schreiben:
    Code:
    struct Point {
        uint32_t X[11];
        uint32_t Y[11];
    };
    Meiner Meinung nach erhöht das die Lesbarkeit. Zudem zeigt mir dann das Autocomplete gleich an, wie viele Elemente das X-Array (bzw. Y-Array) Feld hat. Eine gute Überlegung ist: Wenn ich in einem halben Jahr den Code wieder lese, weiss ich noch, was damit gemeint ist? Bei dieser Art des typedefs ist das (jedenfalls für mich) nicht der Fall. Bereits nach sehr kurzer Zeit fragt man sich ob das jetzt 11 Elemente oder 3 Elemente sind.

  3. Gefällt mir Chromatin liked this post

Ähnliche Themen

  1. C# Kommunikation zwischen MDI Hauptfenster und Child
    Von Prophion im Forum Code Kitchen
    Antworten: 2
    Letzter Beitrag: 18.02.13, 01:21
  2. child -> parent problematik
    Von easteregg im Forum (Web-) Design und webbasierte Sprachen
    Antworten: 4
    Letzter Beitrag: 09.02.09, 00:54
  3. Domain definieren
    Von jayD im Forum (Web-) Design und webbasierte Sprachen
    Antworten: 12
    Letzter Beitrag: 03.10.07, 13:35
  4. Struct
    Von MaTTEvIL im Forum Code Kitchen
    Antworten: 3
    Letzter Beitrag: 27.11.04, 00:11
  5. Prozess(bzw Child) beenden...
    Von PeaceTreaty im Forum Code Kitchen
    Antworten: 0
    Letzter Beitrag: 07.05.02, 10:57

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •