Per motivi di manutenibilità preferisco la sintassi lista con le variabili esplicitamente individuati, come segue:
counter_t counter = {.hour = 10, .min = 30, .sec = 47};
o per il ritorno in linea ad esempio:
return (struct counter_t){.hour = 10, .min = 30, .sec = 47};
posso immaginare uno scenario in cui uno cambia l'ordine in cui sono dichiarate le variabili e, se non si identificano esplicitamente le variabili, si dovrà passare attraverso tutto il codice per correggere l'ordine delle variabili. In questo modo è più pulito e più leggibile penso
Side-note:
Come @AshleyDuncan e @MM put, questa funzionalità è stata rimossa dal ISO C++ dopo C99 https://stackoverflow.com/a/12122261/2770195, ma è supportato in gnu C++.
Così, mentre si può fare questo bene:
g++ -std=gnu++11 main.cpp -o main
Questo genera un errore se si tenta l'esempio precedente:
# need an example. I was unable to find. Even clang++ supports it. If you know
# one, please suggest an edit
Se avete bisogno di compilare con un compilatore C++ con supporto per ISO C++ 11 o successivo che non riconosce questa estensione gnu, potresti dover utilizzare una classe con un semplice costruttore:
// backup workaround
// not cool
class gnuFTW {
public:
int hour;
int min;
int sec;
gnuFTW(int hour, int min, int sec) {
this->hour = hour;
this->min = min;
this->sec = sec;
}
};
int main(int argc, const char * argv[]) {
gnuFTW counter = gnuFTW(10,30,47);
cout << counter.hour << endl;
return 0;
}
Questo dovrebbe funzionare. –
Sì, sembra che funzioni se faccio la dichiarazione nella stessa riga in modo simile a 'counter_t counter = {10,30,47}' ma non se la dichiarazione è stata fatta prima di questo compito. – mindthief
@Oli: Perché dovrebbe funzionare? Come scritto è un incarico, non un'inizializzazione. – sth