错误:二进制<<的无效操作数(具有“ struct str *”和“ int”)

时间:2019-08-22 08:55:53

标签: c

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

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;
}

1 个答案:

答案 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))