如何确保以下程序不会导致这些错误?
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
error: invalid operands to binary << (have ‘struct EXT_HDR *’ and ‘int’)
我的预期输出是:15
执行此操作的代码如下,其中我使用typedef struct
指针和#define(以了解用法)。
#include <stdio.h>
typedef struct EXT_HDR {
int sar,rs;
}str;
#define output(O,I) (O |= ((str*)I->sar) | (((str*)I->rs)<<2))
int main(){
int out = 0;
str* val;
val->sar = 3;
val->rs = 3;
output(out,val);
printf("output= %d\n",out);
return 0;
}
答案 0 :(得分:2)
您正在尝试将int
投射到str *
((str*)I->rs)
在这里,您将I->rs
投射到str *
,但这是您的意思。
((str*)I)->rs
更改
#define output(O,I) (O |= ((str*)I->sar) | (((str*)I->rs)<<2))
到
#define output(O,I) (O |= (((str*)I)->sar) | (((str*)I)->rs<<2))