目前我对预处理器有一个非常奇怪的错误.我搜索过,找不到任何相关内容,因此想在此发布.以下是我的示例代码
#include <stdio.h>
#define DDR_BASEADDR 0x000000000U + 128*1024*1024
int main()
{
uint32_t* test2 = (uint32_t*) DDR_BASEADDR;
uint32_t whatIsThis = DDR_BASEADDR;
uint32_t* test3 = (uint32_t*) whatIsThis;
printf( "%x %x %x %x\n\r", DDR_BASEADDR, test2, test3, whatIsThis);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码的输出应该都是0x8000000.但是,产出是:8000000 20000000 8000000 8000000.
我相信这是不是导致此问题的数据类型,因为它也将出现,即使我改uint32_t* test2 = (uint32_t*) DDR_BASEADDR;到int32_t* test2 = (int32_t*) DDR_BASEADDR;
我在Zedboard的ARM A9和C++在线编译器上测试了这一点,得到了相同的结果.感谢您的时间和精力.
Thang Tran
宏扩展给你
uint32_t* test2 = (uint32_t*) 0x000000000U + 128*1024*1024;
Run Code Online (Sandbox Code Playgroud)
当你可能期望的时候
uint32_t* test2 = (uint32_t*) (0x000000000U + 128*1024*1024);
Run Code Online (Sandbox Code Playgroud)
这就是为什么建议在宏定义中使用大量括号,或者 - 甚至更好 - 使用函数.
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |