2015-09-22 11 views
8

Ho una matrice di 3 elementi. Ma voglio solo inizializzarne 2. Lascio vuoto il terzo elemento.Valore degli elementi non inizializzati nella matrice del linguaggio C

unsigned char array[3] = {1,2,}; 
int main(){ 
    printf("%d",array[2]); 
    return 0; 
} 

Il risultato di stampa è 0. L'ho provato su IAR e qualche compilatore online.

Esiste una regola C per il valore del terzo elemento? C'è qualche compilatore che riempie il terzo elemento di 0xFF? (Soprattutto cross compilatore)

risposta

10

Sì, lo standard C definisce cosa succede in questo caso. Quindi no, non ci dovrebbe essere alcun compilatore C conforme allo standard che intialis con 0xFF in questo caso.

sezione 6.7.9 della norma dice:

inizializzazione

...

10 ... Se un oggetto che ha una durata di stoccaggio statico o thread non è inizializzato esplicitamente, quindi:

  • se ha il tipo di puntatore , è inizializzato su un puntatore nullo;
  • se ha tipo aritmetico, è inizializzato a zero (positivo o senza segno);
  • se è un aggregato, ogni membro viene inizializzato (in modo ricorsivo) in base a queste regole, e qualsiasi padding viene inizializzato a zero bit;
  • se è un unione, il primo membro denominato viene inizializzato (in modo ricorsivo) in base a queste regole e qualsiasi padding viene inizializzato su zero bit;

...

21 Se ci sono meno inizializzatori in una lista tra graffe racchiuso che là sono elementi o membri di un aggregato o meno caratteri in una stringa letterale utilizzati per inizializzare un array di le dimensioni note che ci sono sono elementi nell'array, il resto dell'aggregato deve essere inizializzato implicitamente come gli oggetti con durata di memorizzazione statica .

0

Da this post, sembra che la sintassi inizializzerà tutti gli elementi dopo la virgola a zero. Inoltre; tutti i dati non inizializzati nel segmento dati del programma (in altre parole tutte le variabili globali non inizializzate) vengono automaticamente impostati su zero, quindi se si sta cercando un comportamento non definito in questo programma, non ce n'è; sarà sempre 0.

0

Questo può essere ottenuto con estensione gcc come sotto array di caratteri non firmati [10] = {1,2, [2 ... 9] = 0xFF};

+2

Questo in realtà non risponde alla domanda. L'OP voleva sapere se c'è una regola per il valore con cui gli indici non specificati sono inizializzati con (c'è) e ogni compilatore implicitamente li inizializza a 0xFF (nessun compilatore conforme agli standard lo farebbe). –

Problemi correlati