C'è un motivo per l'avviso here, ma questo non riesce a rispondere all'intera immagine. Ad esempio, il codice seguente fa scattare l'allarme:Qual è lo scopo di -Wbad-function-cast, perché si applica solo al valore di ritorno diretto?
(int)round(M_PI);
, ma d'altra parte il seguente codice non lo fa:
double d;
(int)(d = round(M_PI));
questo non lo fa neanche:
(int)M_PI;
la logica era che non dovresti convertire in int semplicemente lanciando, ma dovresti usare round
, floor
o una funzione simile. Tuttavia usando round
si attiverà comunque l'avviso, ma come visto sopra a typecasting una costante o una variabile assegnata no.
Quindi, se è così male per lanciare da double
a int
, allora perché non lo fa il trigger di avviso quando si scrive o (int)d
(int)M_PI
? In che modo si dovrebbe aggirare l'avviso nel caso in cui si desideri convertire il valore di ritorno? C'è un avvertimento che gestirà queste pericolose conversioni in un modo più corretto/ragionevole?