Estoy creando algún tipo de frontend para un programa. Para iniciar el programa, estoy usando la llamada CreateProcess()
, que entre otras cosas recibe un puntero a una estructura STARTUPINFO
. Para inicializar la estructura que solía hacer:¿Por qué el compilador lanza esta advertencia: "falta el inicializador"? ¿No se inicializó la estructura?
STARTUPINFO startupInfo = {0}; // Or even '\0'.
startupInfo.cb = sizeof(startupInfo);
Al compilar el programa con GCC permite a estos conjuntos de advertencias -Wall -Wextra
me da una advertencia que indica que hay una falta de inicialización que apunta a la primera línea.
warning: missing initializer
warning: (near initialization for 'startupInfo.lpReserved')
así que terminé haciendo:
STARTUPINFO startupInfo;
memset(&startupInfo, 0, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
Y de esta manera el compilador no da ninguna advertencia. La pregunta es, ¿cuál es la diferencia entre estas formas de inicializar una estructura? Usando el primer método, ¿no se inicializó la estructura? ¿Cuál recomendaría usted?
No me da ninguna advertencia usando VC2008/W4 – AraK
Sí, gracias, también en este caso. Al menos GCC 4.4.1 y 4.5.0 dan esa advertencia, puede deberse al relleno que mencionas. – Shantia
La advertencia es solo eso: una advertencia. Está bien ignorar esta advertencia específica en esta ocasión específica. El compilador emite la advertencia para ayudarlo en casos como: 'struct struct_with_four_fields x = {1, 2, 3};' donde solo se inicializan 3 de los 4 miembros. – pmg