gpt4 book ai didi

c - 用于存储地址的嵌入式 C 正确数据类型

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

在嵌入式 32 位 MCU 上,存储地址的正确数据类型是什么?我正在阅读的代码是菜单的一部分,该菜单允许用户通过指定地址来检查内存的内容。变量address 被声明为unsigned int。这是最佳实践吗?

  #define MemoryRead(A) (*(volatile unsigned long*)(A))

int debug monitor(void) {

unsigned int address, value;

for (;;) {
ch = getchar();

address = 0;

if (('0' <= ch && ch <= '9') || {
putchar(ch);
printf("\r\nAddress in hex> ");
address = getnum();
printf("Address = ");
printf("%x\r\n",address);
}

switch(ch & 0x7f) {
case '1':
value = MemoryRead(address);
printf("%x\r\n",value);
break;

}

最佳答案

没有。无法保证指针与 int 的大小相同,尽管对于 32 位体系结构来说,这几乎是肯定的。

用于将地址保存为整数类型的最佳类型是 uintptr_t ,它在 stdint.h 中定义,保证足够长以保存地址。

保存通用指针的最佳类型是void*

如果您使用 uintptr_t 或实际指针,即 void*,则地址的 printf 格式说明符应为 %p

在您的代码中,打印 MemoryRead 结果(unsigned long)的正确格式说明符是 %lx

关于c - 用于存储地址的嵌入式 C 正确数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42717344/

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