avvertimento ho notato questo comportamento interessante del compilatore g ++, se posso aggiungere una bandiera -O3 al compilatore, ottengocompilatore g ++: ottimizzazione bandiera aggiunge messaggio
otsu.cpp:220: warning: ‘x’ may be used uninitialized in this function
Tuttavia, quando io non uso l'ottimizzazione e la usa invece un flag di debug -g Non ho ricevuto alcun avviso. Ora, mi fido del compilatore di più quando il flag -g è attivo; tuttavia, mi chiedo se questo è un comportamento ben definito che dovrebbe essere previsto?
Per chiarezza, il codice che causa questo è qualcosa lungo queste linee:
int x; //uninitialized
getAValueForX(&x); // function makes use of x,
// but x is unitialized
dove
void getAValueForX(int *x)
{
*x = 4;
}
o qualcosa del genere, ovviamente più complessa.
inserire il codice che causa l'avviso –
ok aggiornato con un esempio concreto. – ldog
Con x come globale, tutto ciò che accede a x può farlo prima che venga assegnato un valore. O hai semplificato l'esempio troppo a lungo, o il tipo di analisi richiesto per dimostrare che non sarebbe al di là dell'ambito e della capacità dell'ottimizzatore. L'avvertimento è solo un effetto collaterale dell'ottimizzazione, ha l'opportunità di avvertirti in questo modo. – Clifford