La riga che indica che compila genera un avviso. Facciamo a pezzi la tua funzione InitializeHero
.
person hero = {0,0, {0,0}};
Qui si sta istanziare la nuova person
struct nome hero
. Si utilizza il metodo di inizializzazione del controvento per impostare i membri della struct. In questo caso, l'unico membro di person
è un loc
. Uno stesso loc
ha solo due uint8_t
s. Usando il metodo di inizializzazione delle parentesi quadre, useresti semplicemente {0, 0}
.
La combinazione di questi due, si potrebbe scrivere una dichiarazione come:
person hero = {{0, 0}};
Si noti che è possibile utilizzare solo l'inizializzazione doppietta durante l'inizializzazione. Le altre due dichiarazioni sono assegnazioni. La struttura è già stata inizializzata a questo punto, motivo per cui queste due istruzioni non vengono compilate.
Un'altra nota, la variabile globale static person hero
è stato oscurato dalla variabile localehero
in InitializeHero
. Ciò significa che stai creando una struttura separata person
nello InitializeHero
. Tuttavia, questa variabile statica viene inizializzata in cui è dichiarata in questo caso, così la sua dichiarazione deve leggere
static person hero = {{0, 0}};
... lasciando InitializeHero
inutilizzato.
Huh? La tua prima inizializzazione non * compila *. Hai 4 scalari dentro '{}' e solo 2 membri scalari nella struttura. Questo è un errore in C. – AnT
Più o meno un duplicato a: http://stackoverflow.com/q/24138140/694576 – alk
possibile duplicato di [Come inizializzare una struttura in ANSI C] (http://stackoverflow.com/questions/330793/how-to-initialize-a-struct-in-ansi-c) – alk