C asignación a distancia

Encontré un código hoy que usaba una syntax que en mis años de progtwigción en C nunca había visto.

MWE:

#include char *example_array[] = { [0 ... 5] = "hello world", [6 ... 10] = "goodbye world" }; int main(void) { printf("%s, %s.\n", example_array[3], example_array[7]); return 0; } 

Rendimiento esperado:

 hello world, goodbye world. 

Es bastante claro lo que está sucediendo aquí en un contexto estático, pero tengo curiosidad por si esto se puede usar como un atajo conveniente en los accesos directos no estáticos, como las asignaciones en un bucle. Por supuesto, no le daría a ninguna mejora de rendimiento lo que -funroll-loops no podría, pero podría hacer para un código más limpio en, por ejemplo, asignaciones de fila de matriz o de otra manera.

clang y gcc no emiten advertencias de forma predeterminada al usar esta syntax, pero nunca la he visto documentada en ninguna parte. ¿Es este un tipo de extensión, o es la syntax de C estándar?

Esta es una extensión de GNU para los inicializadores designados compatibles con gcc y clang, que puede leer en los documentos de gcc . Tenga en cuenta que esto es solo para los inicializadores, no para las asignaciones, que son cosas muy diferentes, a pesar de que ambos usan el símbolo = .