2016-11-28 95 views
-3

我得到這樣的警告:其關於型鑄造>

鑄造從指針不同大小的整數[-Wpointer到INT鑄] RET =(int)的BUF^MACRO;

如何刪除此警告?

#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

'無效的主要()'是非法的簽名。那代碼應該做什麼?即使沒有特定的架構,也沒有任何意義。 – Olaf

+2

UB ... UB無處不在... –

+0

幫助我ramove警告其代碼的一部分,我修改了它,不應該得到那個警告,找到一個解決方案幫助很多 – Nisarg

回答

0

獲取解決方案

#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

您投下並取消引用未初始化的指針 –

+0

@ M.M所以這裏有什麼問題?我知道buf指向一些垃圾地址。 –

+0

這是未定義的行爲 –