gpt4 book ai didi

c - 错误: expected ‘)’ before numeric constant

转载 作者:行者123 更新时间:2023-11-30 20:00:20 25 4
gpt4 key购买 nike

这是我的代码的一部分。

#define BASE_ADDR       (0x41E00000)
#define UPPER_LIMIT 0X41E0FFFF
#define CONTROL_REG ((uint32_t *)(BASE_ADDR+0x60))
#define STATUS_REG ((uint32_t *)(BASE_ADDR+0x64))
#define DTR ((uint32_t *)(BASE_ADDR+0x68))
#define DRR (uint32_t *(BASE_ADDR+0x6C))
#define SLAVE_SEL ((uint32_t *)(BASE_ADDR+0x70))

它在 BASE_ADDR 定义语句上给出错误:

 spicode.c:11:21: error: expected ‘)’ before numeric constant
#define BASE_ADDR (0x41E00000)
^

编辑:我的程序中随机位置出现错误,因为我在定义 DRR 时没有将括号放在 uint32_t 周围,放置这些括号也消除了其余错误。

最佳答案

问题出在DRR的定义上。

按如下方式更改:

#define DRR ((uint32_t *)(BASE_ADDR+0x6C))
<小时/>

在这种情况下,选项-E对于查看预处理器如何扩展宏非常有用。在这种情况下使用clang -E这是你得到的输出:

int main(){
uint32_t* a= (uint32_t *(0x41E00000 +0x6C));
return 0;
}

原始源代码在哪里:

#define BASE_ADDR       0x41E00000
#define UPPER_LIMIT 0X41E0FFFF
#define CONTROL_REG ((uint32_t *)(BASE_ADDR+0x60))
#define STATUS_REG ((uint32_t *)(BASE_ADDR+0x64))
#define DTR ((uint32_t *)(BASE_ADDR+0x68))
#define DRR (uint32_t *(BASE_ADDR+0x6C))
#define SLAVE_SEL ((uint32_t *)(BASE_ADDR+0x70))


int main(){
uint32_t* a= DRR;
return 0;
}

现在很清楚为什么这段代码无法编译。

gcc 给出有关错误的信息消息:

test.c:10:25: error: expected ‘)’ before numeric constant
#define BASE_ADDR 0x41E00000
^
test.c:15:25: note: in expansion of macro ‘BASE_ADDR’
#define DRR (uint32_t *(BASE_ADDR+0x6C))

clang 也做得很好:

test.c:20:15: error: expected ')'
uint32_t* a= DRR;
^
test.c:15:25: note: expanded from macro 'DRR'
#define DRR (uint32_t *(BASE_ADDR+0x6C))

关于c - 错误: expected ‘)’ before numeric constant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45439657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com