“->”的类型参数无效(有无符号整数)错误

问题描述 投票:0回答:1

我在c中定义了一个宏函数为

#define PortA_Clk_En()     RCC->AHB1ENR |= (1 << 0)

但是当我在程序内调用宏函数时,出现以下错误

“->”的类型参数无效(具有无符号整数)

RCC 型式铸造为

#define base_addr    0x20097654
#define RCC     (Reg_t*)base_addr

Reg_t
在哪里

typedef struct{
    uint32_t AHB1ENR;
}Reg_t;

我不明白问题出在哪里。

c struct casting
1个回答
0
投票

这个:

RCC->AHB1ENR

将扩展到此:

(Reg_t*)base_addr->AHB1ENR

并且由于

->
运算符的优先级高于类型转换运算符,因此它解析为:

(Reg_t*)(base_addr->AHB1ENR)

并且由于

base_addr
不是指向结构或联合的指针,因此您会收到错误。

您需要在

#define
中添加括号,以便按照您想要的方式对内容进行分组:

#define RCC     ((Reg_t*)base_addr)
© www.soinside.com 2019 - 2024. All rights reserved.