从 const 获取地址
Get address from const
来自manual:
One can get the address of variables, but one can't use it on variables declared through let statements
我了解这样做是为了确保安全。现在,如果我想不惜一切代价从 const 获取地址,是否有解决方法?
Consts 确实没有地址,它们甚至可能根本没有存储在任何地方。让我们看看这个小程序,看看它的中间 C 源代码发生了什么:
const x = 10
echo x
echo x + 1
相关的 C 代码如下所示:
STRING_LITERAL(TMP5, "10", 2);
STRING_LITERAL(TMP6, "11", 2);
NIM_EXTERNC N_NOINLINE(void, xInit)(void) {
printf("%s2", ((NimStringDesc*) &TMP5)? (((NimStringDesc*) &TMP5))->data:"nil");
printf("%s2", ((NimStringDesc*) &TMP6)? (((NimStringDesc*) &TMP6))->data:"nil");
}
所以计算实际上是在编译时完成的,echo
的最终字符串存储在程序中而不是 int x
。
来自manual:
One can get the address of variables, but one can't use it on variables declared through let statements
我了解这样做是为了确保安全。现在,如果我想不惜一切代价从 const 获取地址,是否有解决方法?
Consts 确实没有地址,它们甚至可能根本没有存储在任何地方。让我们看看这个小程序,看看它的中间 C 源代码发生了什么:
const x = 10
echo x
echo x + 1
相关的 C 代码如下所示:
STRING_LITERAL(TMP5, "10", 2);
STRING_LITERAL(TMP6, "11", 2);
NIM_EXTERNC N_NOINLINE(void, xInit)(void) {
printf("%s2", ((NimStringDesc*) &TMP5)? (((NimStringDesc*) &TMP5))->data:"nil");
printf("%s2", ((NimStringDesc*) &TMP6)? (((NimStringDesc*) &TMP6))->data:"nil");
}
所以计算实际上是在编译时完成的,echo
的最终字符串存储在程序中而不是 int x
。