Matriz estranha inicializa a expressão?

Qual é o significado de seguir o Código? O código é do conjunto de testes de regressão do GCC.

static char * name[] = { [0x80000000] = "bar" }; 

Em C99, você pode especificar os índices da matriz para o valor atribuído, por exemplo:

 static char * name[] = { [3] = "bar" }; 

é o mesmo que:

 static char * name[] = { NULL, NULL, NULL, "bar"}; 

O tamanho da matriz é quatro. Verifique um código de exemplo trabalhando no ideaone . Em seu tamanho de matriz de código é 0x80000001 (é um número hexadecimal).
Nota: Elementos não inicializados inicializados com 0 .

5.20 Inicializadores Designados :

Na ISO C99, você pode fornecer os elementos em qualquer ordem, especificando os índices da matriz ou os nomes dos campos de estrutura aos quais eles se aplicam, e o GNU C também permite isso como uma extensão no modo C89. Esta extensão não está implementada no GNU C ++. Para especificar um índice de matriz, escreva [index] = antes do valor do elemento. Por exemplo,

  int a[6] = { [4] = 29, [2] = 15 }; 

é equivalente a

  int a[6] = { 0, 0, 15, 0, 29, 0 }; 

Mais uma declaração interessante é possível em uma extensão GNU:

Uma syntax alternativa para isto que tem sido obsoleta desde que o GCC 2.5, mas o GCC ainda aceita, é escrever [index] antes do valor do elemento, com no = .

Para inicializar um intervalo de elementos com o mesmo valor, escreva [first ... last] = value . Por exemplo,

  int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 

Nota: que o comprimento da matriz é o valor mais alto especificado mais um.

Além disso, podemos combinar essa técnica de nomear elementos com a boot C comum de elementos sucessivos. Cada elemento inicializador que não possui um designador se aplica ao próximo elemento consecutivo da matriz ou estrutura. Por exemplo:

  int a[6] = { [1] = v1, v2, [4] = v4 }; 

é equivalente a

  int a[6] = { 0, v1, v2, 0, v4, 0 }; 

Rotular os elementos de um inicializador de matriz é especialmente útil quando os índices são caracteres ou pertencem a um tipo de enumeração. Por exemplo:

  int whitespace[256] = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 

É chamado inicializador designado que é introduzido no C99, o gcc também o suporta no GNU89 como uma extensão, veja aqui para detalhes.

  int a[6] = { [4] = 29, [2] = 15 }; 

é equivalente a

  int a[6] = { 0, 0, 15, 0, 29, 0 }; 

É um inicializador designado pelo C99. o valor entre colchetes especifica o índice para receber o valor.