2016-06-29 16 views
0

Ich versuche, den folgenden Code im 32-Bit- und 64-Bit-Modus zu kompilieren. Aber das Ding hier ist, keine Probleme mit 32-Bit, gibt es Kompilierungsfehler in 64 Bit.Fehler: Umwandlung von int (*) (const char *, stat *) zu unsigned int verliert die Genauigkeit

Bitte geben Sie mir Ihren Vorschlag für die erfolgreiche Kompilierung im 64-Bit-Modus.

#include<stdarg.h> 
#include<stdio.h> 
#include "sys/stat.h" 

int main(void) 
{ 
    int val; 

    val = int((unsigned(stat)>>8))&0xff; 
    printf("val = %d\n", val); 

    return 0; 
} 

[[email protected] ~]$ g++ -m64 bit_ops.cpp 
bit_ops.cpp: In function âint main()â: 
bit_ops.cpp:9: error: cast from âint (*)(const char*, stat*)throw()â to  âunsigned intâ loses precision 
[[email protected] ~]$ 
+0

vielleicht lesen Sie die [Dokumentation für stat] (http://pubs.opengroup.org/onlinepubs/009695399/functions/stat.html). Und/oder beschreiben Sie, was Sie versuchen zu tun, weil der Code, den Sie gepostet haben, einen Fehler enthält, den der Compiler erfolgreich diagnostiziert hat. –

Antwort

3

Sie enthalten erfolgreich sys/stat.h, die Sie auf die Funktion zugreifen gibt: int stat(const char *path, struct stat *buf);, deren Adresse Sie versuchen, eine nicht signierte zu werfen. Auf einer 32-Bit-Plattform ist dies in Ordnung (da möglicherweise sowohl die Adresse als auch die unsigned 32-Bit-Werte sind), aber für Ihr 64-Bit ist das nicht signierte^(möglicherweise) 32 Bit und die Adresse 64 Bit. Deshalb beschwert sich der Compiler über den Verlust der Präzision.

Sehen Sie mehr über stat: http://linux.die.net/man/2/stat

Aber warum eigentlich tun Sie die Adresse einer Funktion in bitweise Operationen werfen wollen?

+0

Hallo, vielen Dank für Ihren Vorschlag/Ihre Antwort. Tatsächlich portieren wir ein bestehendes Projekt von 32-Bit auf 64-Bit. Die obige typische Codezeile befindet sich bereits im Projekt –

+0

umm .... es ist mir immer noch nicht klar, wieso willst du die Adresse einer Funktion darstellen? – fritzone

+0

weiß es nicht. es ist bereits Code vorhanden –

Verwandte Themen