En aras de mantenimiento prefiero la sintaxis de una lista con las variables identificadas de forma explícita, de la siguiente manera:
counter_t counter = {.hour = 10, .min = 30, .sec = 47};
o para el retorno de línea, por ejemplo:
return (struct counter_t){.hour = 10, .min = 30, .sec = 47};
puedo imaginar un escenario en el que uno cambia el orden en que se declaran las variables, y si no identifica explícitamente sus variables, debe pasar por todo el código para corregir el orden de las variables. De esta manera es más limpio y más fácil de leer Creo
nota lateral:
Como @AshleyDuncan y poner @MM, esta característica fue retirado de la ISO C++ después de C99 https://stackoverflow.com/a/12122261/2770195, pero se apoya en gnu C++.
Así, mientras que usted puede hacer esto muy bien:
g++ -std=gnu++11 main.cpp -o main
Esto generará un error si se intenta el ejemplo anterior:
# need an example. I was unable to find. Even clang++ supports it. If you know
# one, please suggest an edit
Si necesita compilar con un compilador de C++ con el apoyo para ISO C++ 11 o posterior que no reconoce esta extensión gnu, puede que tenga que usar una clase con un constructor simple:
// 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;
}
Eso debería funcionar. –
Sí, parece que funciona si hago la declaración en la misma línea, por ejemplo, 'counter_t counter = {10,30,47}', pero no si la declaración se ha realizado antes de esta asignación. – mindthief
@Oli: ¿Por qué debería funcionar? Como está escrito, es una tarea, no una inicialización. – sth