J'ai utilisé le code suivant pour lire des données à partir de fichiers dans le cadre d'un programme plus vaste.
double data_read(FILE *stream,int code) {
char data[8];
switch(code) {
case 0x08:
return (unsigned char)fgetc(stream);
case 0x09:
return (signed char)fgetc(stream);
case 0x0b:
data[1] = fgetc(stream);
data[0] = fgetc(stream);
return *(short*)data;
case 0x0c:
for(int i=3;i>=0;i--)
data[i] = fgetc(stream);
return *(int*)data;
case 0x0d:
for(int i=3;i>=0;i--)
data[i] = fgetc(stream);
return *(float*)data;
case 0x0e:
for(int i=7;i>=0;i--)
data[i] = fgetc(stream);
return *(double*)data;
}
die("data read failed");
return 1;
}
Maintenant, je suis obligé d'utiliser -O2
et je reçois la suite gcc avertissement:
warning: dereferencing type-punned pointer will break strict-aliasing rules
Googleing j'ai trouvé deux orthogonaux réponses:
vs
En fin de compte je ne veux pas ignorer les avertissements. Que recommanderiez-vous?
[mise à jour] j'ai remplacé le jouet exemple avec la fonction réelle.