宏定义有关地址时大小写有区别么?
#define ADDR_FLASH_PAGE_148 ((uint32_t)0x0804A000)#define ADDR_FLASH_PAGE_149 ((uint32_t)0x0804A800)如上大写定义地址,会出现上百个警告。#define ADDR_FLASH_PAGE_148 ((uint32_t)0x0804a000)#define ADDR_FLASH_PAGE_149 ((uint32_t)0x0804a800)如上小写地址,就没有这些警告真奇怪如果可能,调整编译器的警告级别或敏感性设置,以减少不必要的警告。 统一代码风格避免大小写混用导致的潜在问题。 使用编译器提供的预处理输出查看预处理后的代码,检查是否有宏定义冲突。 你试过别的地址吗?比如 0x0804B000 之类的,看是不是同样的问题? 感觉像是编译器在解析时对大写和小写地址有不同的处理逻辑,这真是个奇怪的坑。 这要是个 Bug,那也太隐蔽了,换个版本的编译器看看会不会好点? 这个问题如果搞不明白,可以试着手动转换大小写,看看编译器的警告信息会不会变化。 不管啥原因,这都太诡异了,真的很想知道具体的警告内容,能贴出来看看吗? 这也太奇怪了吧,理论上大写小写的地址值应该是一样的,编译器居然会区分? 你用的是什么编译器?有没有试过换个编译器看看是不是一样的情况? 这个警告具体是啥?是不是编译器对大写格式的地址做了额外的检查? 可能是某个编译选项在作怪,试试换个编译优化等级看看会不会还有警告。 这是不是和 CubeIDE 或者某个 ST 提供的库有关?有些库对格式可能有特殊要求。 从语法角度看,地址 0x0804A000 和 0x0804a000 在 C 语言中是完全等价的。 0x0804A000 和 0x0804a000 代表的是同一个地址。 闪存地址可能有严格的对齐要求
页:
[1]