Child eines Struct allgemein definieren

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.
 
Zuletzt bearbeitet:
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.
 
Zurück
Oben