2016-11-28 4 views
-3

Ich habe diese Warnung:Sein über Art Casting>

Besetzung von Zeigern auf ganze Zahl unterschiedlicher Größe [-Wpointer-to-int-cast] ret = (int) buf^MACRO;

Wie kann ich diese Warnung entfernen?

#include<stdio.h> 
#include<stdlib.h> 
#define MACRO (int)0x12345678U 

struct fake{ 
     int data; 
}; 

void main() 
{   int ret; 
      struct fake *buf; 
      ret=(int)buf^MACRO; 
      printf("buf::%x\n",&buf); 
      printf("MACRO::%x\n",MACRO); 
      printf("ret::%x\n",ret); 
} 
+1

'void main()' ist eine illegale Unterschrift. Und was soll dieser Code tun? Auch ohne eine spezifische Architektur macht es keinen Sinn. – Olaf

+2

UB ... UB überall ... –

+0

helfen Sie mir, diese Warnung seinen Teil des Codes zu ramove, ich änderte es und sollte nicht diese Warnung bekommen, eine Lösung hilft Los – Nisarg

Antwort

0

get Lösung

#include<stdio.h> 
#include<stdlib.h> 
#define MACRO (int)0x12345678U 

struct fake{ 
     int data; 
}; 

void main() 
{   int ret; 
      struct fake *buf; 
      ret=((*(int *)buf)^MACRO); 
      printf("buf::%x\n",&buf); 
      printf("MACRO::%x\n",MACRO); 
      printf("ret::%x\n",ret); 
} 
+0

Sie einen nicht initialisierten Zeiger werfen und dereferenzieren –

+0

@ M.M so was ist das Problem hier? Ich weiß, dass Buf auf eine Mülladresse zeigt. –

+0

es ist undefiniertes Verhalten –

Verwandte Themen