Uso extraño de aparatos rizados en C
Lo siento por la simple pregunta, pero estoy de vacaciones leyendo un libro en core audio, y no tengo mis libros C u Objective C conmigo...
¿Qué están haciendo las llaves en esta definición de variable?
MyRecorder recorder = {0};
5 answers
Suponiendo que MyRecorder
es un struct
, este establece a cada miembro en su respectiva representación de cero (0
para enteros, NULL
para punteros, etc.).
En realidad esto también funciona en todos los otros tipos de datos como int
, double
, punteros, matrices, estructuras anidadas,..., todo lo que puedas imaginar (¡gracias a pmg por señalar esto!)
ACTUALIZACIÓN: Una cita extraída del sitio web vinculado anteriormente, citando el borrador final de C99:
[6.7.8.21] Si hay hay menos inicializadores en una lista cerrada con llaves que hay elementos o miembros de un agregado, [...] el resto de la el agregado se inicializará implícitamente igual que los objetos que tener una duración de almacenamiento estático.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-05 17:37:02
Su inicialización todos los miembros de recorder
estructura a 0
de acuerdo con el estándar C99. Podría parecer que inicializa cada bit de la estructura con 0
bits. Pero eso no es cierto para todos los compiladores.
Ver este código de ejemplo,
#include<stdio.h>
struct s {
int i;
unsigned long l;
double d;
};
int main(){
struct s es = {0};
printf("%d\n", es.i);
printf("%lu\n", es.l);
printf("%f\n", es.d);
return 0;
}
Esta es la salida.
$ ./a.out
0
0
0.000000
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-05 17:40:01
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-05 15:27:12
En realidad, no inicia todos los elementos de la estructura, solo el primero. Pero, los otros se inicializan automáticamente con 0 porque esto es lo que el estándar C pide hacer.
Si pones: MyRecorder recorder = {3};
El primer elemento será 3 y los demás serán 0.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-05 17:30:37
MyRecorder
podría ser uno de los siguientes y usted está tratando de inicializar todos los elementos de que con cero
typedef struct _MyRecorder1 {
int i;
int j;
int k;
}MyRecorder1;
typedef int MyRecorder2[3];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-05 15:44:05