me di cuenta de este comportamiento interesante del compilador g ++, si añado una bandera -O3 al compilador, consigog ++ compilador: indicador de optimización añade un mensaje de advertencia
otsu.cpp:220: warning: ‘x’ may be used uninitialized in this function
Sin embargo, cuando yo no uso la optimización y en su lugar use un indicador de depuración -g No recibí ninguna advertencia. Ahora, confío más en el compilador cuando el indicador -g está activado; Sin embargo, me pregunto si este es un comportamiento bien definido que debería esperarse.
Para mayor claridad, el código que hace que esto es algo a lo largo de estas líneas:
int x; //uninitialized
getAValueForX(&x); // function makes use of x,
// but x is unitialized
donde
void getAValueForX(int *x)
{
*x = 4;
}
o algo por el estilo, obviamente más compleja.
publique el código que causa la advertencia –
ok actualizado con un ejemplo concreto. – ldog
Con x es global, cualquier cosa que acceda a x puede hacerlo antes de que se le asigne un valor. O ha simplificado demasiado el ejemplo, o el tipo de análisis requerido para demostrar que no estaría más allá del alcance y la capacidad del optimizador. La advertencia es solo un efecto secundario de la optimización, tiene la oportunidad de advertirle, por lo que lo hace. – Clifford