GCC Macro 1 + 1不等于2?

 hosion0723 发布于 2022-12-14 19:38

我正在定义使用GCC进行编译的Tiva C系列Launchpad的寄存器.

在头文件中我有如下代码:

样品A.

#define GPIOB_BASE 0x40005000
#define GPIOB_AFSEL_R (*((unsigned long *) GPIOB_BASE + 0x420))
#define GPIOB_DEN_R (*((unsigned long *) GPIOB_BASE + 0x51C)) 
#define GPIOB_PCTL_R (*((unsigned long *) GPIOB_BASE + 0x52C))

为了检查它是否正在按照我的想法进行操作,我编写了这个小程序并按预期返回"10".我继续我的项目,并迅速遇到硬故障的大问题(写入不可写的地址).

宏测试

#include 

#define BASE 0x9
#define BASE + PLUS_ONE 0x01

int main(void){
    printf("%d", PLUS_ONE);
}

经过几个小时的拉动我的头发试图调试,我最终用硬编码的等价物替换了地址.

样品B.

#define GPIOB_BASE 0x40005000
#define GPIOB_AFSEL_R (*((unsigned long *) 0x40005420))
#define GPIOB_DEN_R (*((unsigned long *) 0x4000551C))
#define GPIOB_PCTL_R (*((unsigned long *) 0x4000552C))

硬故障消失了,事情开始起作用了!

有人可以帮我理解样品A样品B之间的区别吗?

(是的,我应该更加关注生成的汇编代码)

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有