Se que el tema ya está solucionado. Sin embargo, por si vuelves a pasar por aquí, te cuento un poco para que te quites el miedo a los flags.
Un flag no es más que un estado binario (1 o 0) que se almacena en una variable. Dado que una variable numérica dispone de varios bits, es posible almacenar varios flags diferentes en una misma variable. Por ejemplo, en un "unsigned int", que típicamente ocupa 4 bytes, sera posible almacenar 32 flags diferentes, uno en cada bit de la variable.
Para "setear" estos flags hay que hacer uso de lógica binaria. Un ejemplo:
Código C++:
Ver originalunsigned int flags = 0;
// Activo el 3er bit
flags |= 0x04 // En binario: 0000 0000 0000 0100
// Activo el 1er bit
flags |= 0x01
// Desactivo el 3er bit
flags ^= 0x04
printf( "%d", flags
); // Imprime 1
Usar una variable a modo de flag puede ser útil cuando quieres, o necesitas, empaquetar información de estado o configuración. Esto se suele hacer configurando un enum para evitar meter la pata con los valores:
Código C++:
Ver originalenum RunConfig
{
NoConfig = 0,
LoadConfig = 1<<0, // 0x01
SaveConfig = 1<<1, // 0x02
LoadData = 1<<2, // 0x04
RunServices = 1<<3, // 0x08
LogEnabled = 1<<4, // 0x10
// ...
};
int flag = LoadConfig | LogEnabled; // 0x01 + 0x10 = 0x11 <-> 0001 0001
// ...
if ( flag & LogEnabled ) // 0001 0001 & 0001 0000 = 0001 0000 != 0
{
// Este código se ejecutará al estar activo el 5º flag
}
if ( flag & RunServices ) // 0001 0001 & 0000 1000 = 0000 0000 == 0
{
// Este código no se ejecutará, el 4º flag no está activo
}
Espero haberte aclarado con esto un poco el tema de los flags