2013-01-14 12 views
9

Il parser CDT segnala un errore di sintassi per l'inizializzazione struttura:C++ GNU struttura designata inizializzazione non riconosciuto in Eclipse

typedef struct MyStruct 
{ 
    int a; 
    float b; 
}; 

int main(void) 
{ 
    // GNU C extension format 
    MyStruct s = {a : 1, b : 2}; 
    // C99 standard format 
// MyStruct s = {.a = 1, .b = 2}; 

    return 0; 
} 

Mentre GCC lists the : form as obsolete, sembrerebbe che non è obsoleta né rimosso. In C99 utilizzerei certamente il modulo standard .<name> = ma per C++, l': è l'unica opzione di cui sono a conoscenza per l'inizializzazione designata.

Ho provato a impostare la mia toolchain su MinGW e Cross GCC, ma nessuno dei due sembra funzionare.

Come posso ottenere Eclipse per riconoscere questa sintassi? Non è un grosso problema per una linea, ma trasporta tutte le altre istanze della variabile poiché Eclipse non si rende conto che è stato dichiarato.

+0

Per essere chiari, il tuo obiettivo è per gli strumenti IDE (come l'evidenziazione della sintassi) per comprendere questa sintassi? – Yakk

+0

Il parser CDT non è correlato alla toolchain. Riconosce un numero di estensioni GCC, probabilmente non contrassegnate come obsolete. –

+0

Sì, spero che qualcuno sia a conoscenza di un'impostazione che potrei aver sbagliato e che avrebbe fatto scattare Eclipse per riconoscerlo. Ho pensato che forse la toolchain avrebbe fatto questo, perché non avrebbe molto senso riconoscere le estensioni GNU quando si utilizza un compilatore non GNU. – altendky

risposta

2

Il modulo . è disponibile solo in C99 e non in qualsiasi tipo di C++. In C++ le uniche opzioni conformi agli standard sono inizializzazioni o costruttori ordinati.

È possibile uso concatenamento con riferimento adeguato ritorno metodi per creare un'interfaccia simile (qui a e b sono metodi piuttosto che variabili):

MyStruct s; 
s.a(1).b(2); 
+0

Nel mio caso la definizione della struttura è in un altro progetto che è puro C. Non conosco davvero la cronologia, ma stiamo usando un framework di test C++ per il nostro codice C. Grazie per il suggerimento però. – altendky

1

mi capita di incontrare questi problemi troppo e io uso di seguito metodo per risolvilo.

MyStruct s = { 
1, 
2, 
} 

Ciò richiede che il programmatore assicuri la sequenza di inizializzazione.

+0

Ti manca chiaramente il punto della sua domanda ... – Cinch