错误:二进制<<的操作数无效(具有"结构 str *"和"int")



如何确保以下程序不会导致这些错误?

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

执行此操作的代码如下,我在其中使用指针和 #definetypedef struct(以了解用法(。

#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= %dn",out);
return 0;
}

您正在尝试将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))

相关内容

最新更新