Buonasera a tutti, sono un nuovo utente e questo e' il mio primo post.
Sono un poor man proveniente da anni di programmazione fortran 90 e ho una conoscenza superficiale di C, siate comprensivi
Ho tagliato del tutto il Fortran e mi sono assestato su python e C+, sostanzialmente C con un "travestimento" da C++ (il minimo indispensabile) per poter accedere ad alcune tecnologie che mi servono, come CUDA.
Uso C sostanzialmente per codici semplici di calcolo numerico e algebra lineare (orientata ad AI), anche HPC.
Vengo alla domanda. Ho la necesssita' di implementare un singolo codice che vada bene indifferentemente per reali a 32 o 64 bit, a seconda dei casi. In fase di compilazione passo al preprocessore il numero 32 o 64 tramite l'opzione -D e cosi definisco un tipo
real che e' un
float o un
double:
typedef float real;
int main() {
real xxx;
printf("Input x: ");
if (sizeof(real) ==4){
scanf("%f", &xxx);
} else if (sizeof(real) ==8){
scanf("%lf", &xxx);
}
}
Il compilatore (ad esempio gcc) non gradisce particolarmente l'idea: compila un eseguibile che funziona, ma mi da' un warning del tipo
test.c:14:13: warning: format ‘%lf’ expects argument of type ‘double *’, but argument 2 has type ‘real *’ {aka ‘float *’} [-Wformat=]
14 | scanf("%lf", &xxx);
| ~~^ ~~~~
| | |
| | real * {aka float *}
| double *
| %f
Vi chiedo se sto sbagliando come idea di fondo e se c'e un modo per eliminare questo tipo di warning.
Grazie anticipatamenteper ogni suggerimento e un saluto a tutti.