C ++:字符串常数的地址
-
28-09-2019 - |
题
我可以将对象的地址作为g ++中的字符串常数吗?例子:
struct s { } x;
如果 &x == 1234
, ,那我需要 "1234"
在我的代码中。
编辑:
通过字符串常数,我的意思是我需要在compile-或链接时间处进行常数字符串。我需要将其嵌入这样的内联汇编代码中:
template < typename U >
struct T {
static int x;
void f () {
asm (".word " some-expression-containing-(&x));
}
};
我不知道用预处理器宏来构建混乱的名称的方法,所以我问了这个问题。
该解决方案不需要便携,G ++就足够了。
地址本身是在编译或链接时间上知道的,因为它可以检查组件输出并将其放入内联汇编指令中。
其他提示
我想知道为什么您需要...但是您可以做到这一点:
#include <sstream>
#include <cstddef> //for ptrdiff_t
....
stringstream ss;
ss << reinterpret_cast<ptrdiff_t>(&x);
ss.str()
现在包含您所需的字符串
编辑: 如果您想做这个编译时间...嗯...我敢假设 不可能?
你可以做
asm(".word x")
(它将仅适用于文件范围变量符号,因为它们可能只能获得符号表条目)。这不是恒定的表达,但是在程序完全链接之前,该地址是不知道的。
在C中,您可以执行此操作,但是,在C中,您正在使用 char *
作为弦,您需要这样的东西:
printf("%i-%i", &string[0], &string[strlen(string) - 1]);
打印字符串所在的内存范围,启动地址的iStead。
错误输出操作数约束缺乏 =
是因为没有操作员 =
在操作员之前 m
. 。拿 =m
不隶属于 StackOverflow