Como o compilador preenche valores char array[100] = {0};
? Qual é a mágica por trás disso?
Eu queria saber como o compilador é inicializado internamente.
c++
c
compiler-construction
Namratha Patil
fonte
fonte
Respostas:
Isso não é mágico.
O comportamento desse código em C é descrito na seção 6.7.8.21 da especificação C ( rascunho online da especificação C ): para os elementos que não têm um valor especificado, o compilador inicializa os ponteiros para NULL e os tipos aritméticos para zero ( e recursivamente aplica isso a agregados).
O comportamento desse código em C ++ é descrito na seção 8.5.1.7 da especificação C ++ ( rascunho online da especificação C ++ ): o compilador inicializa os elementos que não têm um valor especificado.
Além disso, observe que no C ++ (mas não no C), você pode usar uma lista vazia de inicializadores, fazendo com que o compilador inicialize agregado todos os elementos da matriz:
Quanto ao tipo de código que o compilador pode gerar ao fazer isso, dê uma olhada nesta pergunta: Montagem estranha da inicialização da matriz 0
fonte
A implementação depende dos desenvolvedores do compilador.
Se sua pergunta for "o que acontecerá com essa declaração" - o compilador definirá o primeiro elemento da matriz com o valor que você forneceu (0) e todas as outras serão definidas como zero porque é um valor padrão para os elementos da matriz omitidos.
fonte
Se o seu compilador for o GCC, você também poderá usar a seguinte sintaxe:
Consulte http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.html#Designated-Inits e observe que esse é um recurso específico do compilador .
fonte
Depende de onde você coloca essa inicialização.
Se a matriz for estática como em
então é o compilador que reserva os 100 0 bytes no segmento de dados do programa. Nesse caso, você poderia ter omitido o inicializador.
Se sua matriz é automática, é outra história.
Nesse caso, a cada chamada da função foo, você terá um memset oculto.
O código acima é equivalente a
e se você omitir o inicializador, sua matriz conterá dados aleatórios (os dados da pilha).
Se sua matriz local for declarada estática como em
então é tecnicamente o mesmo caso que o primeiro.
fonte