从以下代码获取警告"从不同大小的整数转换为指针"

the*_*tna 9 c gcc gcc-warning

代码是:

           Push(size, (POINTER)(GetCar(i) == term_Null()? 0 : 1));
Run Code Online (Sandbox Code Playgroud)

这里是 C code push回报 ABC这是

 typedef POINTER  *ABC
 typedef void * POINTER
 ABC size;
 Push(ABC,POINTER);
 XYZ GetCar(int);
 typedef struct xyz *XYZ;
 XYZ term_Null(); 
 long int i;
Run Code Online (Sandbox Code Playgroud)

特别警告的原因是什么?

ana*_*lyg 21

您可以使用intptr_t以确保整数具有与指针相同的宽度.这样,您不需要发现有关您的特定平台的内容,它也可以在另一个平台上运行(与unsigned long解决方案不同).

#include <stdint.h>

Push(size, (POINTER)(intptr_t)(GetCar(i) == term_Null()? 0 : 1));
Run Code Online (Sandbox Code Playgroud)

取自C99标准:

7.18.1.4能够保存对象指针的整数类型

1以下类型指定一个带符号的整数类型,其属性是任何有效的void指针都可以转换为此类型,然后转换回指向void的指针,结果将等于原始指针:

使用intptr_t