Составные литералы - это то, что вы ищете, если вы хотите присвоить значения позже, вам нужен синтаксис
struct Orientation O[16];
O[0] = (struct Orientation){'N', 'F', 'N'};
O[1] = (struct Orientation){'N', 'B', 'S'};
O[2] = (struct Orientation){'N', 'R', 'E'};
O[3] = (struct Orientation){'N', 'L', 'W'};
O[4] = (struct Orientation){'S', 'F', 'S'};
O[5] = (struct Orientation){'S', 'B', 'N'};
O[6] = (struct Orientation){'S', 'R', 'W'};
O[7] = (struct Orientation){'S', 'L', 'E'};
O[8] = (struct Orientation){'E', 'F', 'E'};
O[9] = (struct Orientation){'E', 'B', 'W'};
O[10] = (struct Orientation){'E', 'R', 'S'};
O[11] = (struct Orientation){'E', 'L', 'N'};
O[12] = (struct Orientation){'W', 'F', 'W'};
O[13] = (struct Orientation){'W', 'B', 'E'};
O[14] = (struct Orientation){'W', 'R', 'N'};
O[15] = (struct Orientation){'W', 'L', 'S'};
Преимущество состоит в том, что это можно сделать везде внутри функции, а не только во время инициализации.
Хотя, как и все остальные, вы можете просто переписать его как:
struct Orientation O[16] =
{
{'N', 'F', 'N'},
{'N', 'B', 'S'},
{'N', 'R', 'E'},
...
};
Или даже
struct Orientation O[16] =
{
[0] = {'N', 'F', 'N'},
[1] = {'N', 'B', 'S'},
[2] = {'N', 'R', 'E'},
[3] = {'N', 'L', 'W'},
...
};
Если вы просто хотите присвоить значения во время инициализации.