Neben macros (die haben ihre downsides), werden oft nicht namentlich Aufzählungen für den Zweck verwendet nur zur Verfügung stellen kompilieren-Zeitkonstanten. Das würde deinen Code so ändern.
typedef struct {
const int x;
const int y;
} my_struct;
enum {
a = 8,
b = 12,
};
my_struct test = { a, b };
... auch Ausdrücke Kompilierung-Konstanten beteiligt sein können kompilieren Zeitkonstanten sich ...
my_struct test1 = { a+1, b };
my_struct test2 = { a, 'H' };
Auch der sizeof
Betreiber produzieren kann Zeit kompilieren Konstanten:
my_struct test3 = { sizeof(my_struct), b };
Auch wenn dieses Beispiel nicht sehr nützlich aussieht, it compiles.
Für das Lernen, was genau konstante Ausdrücke sind, siehe zum Beispiel Constant expressions - trotz der URL (cppreference.com
), ist dies der C Referenz Teil.
Beachten Sie, dass dies kein Problem wäre, wenn Sie es stattdessen in einer Funktion (ab C99) initialisieren würden. – Groo