2012-04-24 21 views
5

Estoy declarando una estructura en el IDE (Netbeans) así:Struct Declaration: ¿Inicializador válido en la declaración?

struct foo { size_t var = 1; }

Y el IDE dice su legal. Recopilo el proyecto (es una versión estática) y el compilador dice que es legal (no se queja ni tira).

Ahora ya estoy haciendo una prueba de la sintaxis en este punto tengo que pedirle a alguien que pueda saber si esto va a funcionar cuando voy a declarar una estructura de esta etiqueta en mis procedimientos de la siguiente manera:

struct foo myfoo;

Entonces la pregunta es: ¿Es esto un iniciador válido? (size_t var = 1) o es el compilador solo acariciando mi ego aquí? No he encontrado nada en google ni en documentación como esta, así que supongo que no funciona de la manera que espero.

* edit Entonces, yo y los buenos 'chicos' de aquí @SO descubrieron que compilará en una configuración de depuración pero no en una configuración de lanzamiento. ¿Quién dice que una cabeza es mejor que un par de miles? : D

+1

ver pregunta relacionada http://stackoverflow.com/questions/330793/how- to-initialize-a-struct-in-ansi-c – TJD

+0

@TJD ¡Ahora fue rápido e increíble! Gracias. Pero todavía no entiendo por qué GCC y el IDE lo dejan resbalar sin gemir. Acabo de patear las advertencias hasta el tope ... Y aún puedo oír el sonido de los grillos. lol. –

+1

¿Qué versión de gcc estás usando? Acabo de probar con 4.4.3 y me sale un error 'expected': ',', ','; ','} 'o' __attribute__ 'before' = 'token' –

Respuesta

4

No creo que esté permitido. Es necesario especificar el valor de la variable, y no la estructura:

struct foo { size_t var; }; 

struct foo myfoo = { 1 }; 

En cuanto a la IDE lo que le permite, la posibilidad obvia sería que el código es realmente un poco diferente, como por ejemplo:

struct foo { static const size_t var = 1; } 

... y el IDE está recopilando como C++ en lugar de C.

+0

Lo que sea que esté sucediendo es algo curioso. Tal vez esa es mi próxima pregunta. "¿Por qué esto no marca una advertencia de compilación?" –

+0

Gracias por la ayuda ¡Salud! –

+1

@ TristonJ.Taylor ¿No nos dices cuál fue la causa? ¿Estabas usando un C++ IDE? –

1

la respuesta simple es: no se puede inicializar el interior de la definición struct, por lo que si el compilador es permitiéndote hacer eso, está sucediendo algo extraño.

Para inicializar debe instanciar esa estructura en una var (u objeto si eso es lo que está buscando) e inicializar esa var.

Por lo tanto, para su estructura:

struct foo { 
    size_t var = 1; 
} 


Usted habría initiazlize como:

type function_name(...params...) { 
    struct foo myFooVar; 
    myFooVar.var = 1; 
    .... 
    return <type>; 
} 
+0

¡Gracias por tu respuesta! "Hay algo extraño pasando ..." DeJa Vu .. lol En otras palabras: Mis sentimientos exactamente ... –

+0

¿Puedes confirmar el error? 'gcc (GCC) 4.7.0 20120407 (prelanzamiento)' –

+0

Lo encontré: la configuración de depuración de un proyecto permitirá que se desplace, el modo de lanzamiento arroja el fuego de los dragones desde la mitad de la tierra ... o algo así. –

Cuestiones relacionadas