【发布时间】:2014-06-13 19:42:37
【问题描述】:
在 C 中,字符串字面量的形式可以是
char *string = "string here";
整数字面量:
uint8_t num = 5;
长文字:
long long bigNum = 90322L;
浮点字面量:
float decimal = 6.3f;
是一种拥有指针文字的方法吗?那是内存空间的文字地址。我正在做一些嵌入式项目的工作,需要硬编码一个 DMA 访问的值。我正在做类似以下的事情:
uint32_t *source = 0x08000000;
虽然编译并正常工作,但我收到以下编译器错误(我使用的是GCC 的变体):
cc0144: {D} warning: a value of type "int" cannot be used to initialize an entity of type "uint32_t *"
cc0152: {D} warning: conversion of nonzero integer to pointer
是否有正确的方法来做到这一点,还是我只需要接受这是 C 的事实?我知道我能做到:
uint32_t *source = (uint32_t *)0x08000000;
但这似乎非常不必要。行业这样做的方式是什么?我也想知道这个功能是否存在于 C++ 中。
【问题讨论】:
-
“但这似乎很没有必要” 请问您为什么认为没有必要?
-
如果您愿意,可以在 C++11 中编写用户定义的文字运算符。
-
空指针常量是地址文字。非空指针没有文字。一个像
(uint32_t *)0x08000000这样的整数常量是正确的方法——如果那是你系统上的一个有效地址。 -
@dyp 这似乎没有必要,因为我只是假设会有一个内置功能来执行此操作。我觉得人们需要经常这样做
-
@secretformula 你的意思是内置的写入固定地址的功能?不是标准功能,不。地址格式取决于架构。