2015-05-06 5 views
4

Из manual:Получить адрес из сопзЬ

можно получить адрес переменных, но нельзя использовать его на переменные, объявленные с помощью утверждения Пусть

Я понимаю, это делается для обеспечить безопасность. Теперь, если я хочу получить адрес от const во что бы то ни стало, есть ли обходной путь?

ответ

6

У 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("%s\012", ((NimStringDesc*) &TMP5)? (((NimStringDesc*) &TMP5))->data:"nil"); 
    printf("%s\012", ((NimStringDesc*) &TMP6)? (((NimStringDesc*) &TMP6))->data:"nil"); 
} 

Таким образом, расчет на самом деле сделано во время компиляции и конечные строки для echo хранятся в программе вместо int x.

+1

Спасибо, хорошее объяснение. Что делать, если я хочу получить адрес из 'let var'? – Arrrrrrr

+1

@Arrrrrrr: Это именно то, что мне было интересно некоторое время, [приводя к следующему вопросу] (http://stackoverflow.com/q/30132599/1804173). – bluenote10

+0

Спасибо за ваше уведомление @ bluenote10 – Arrrrrrr

 Смежные вопросы

  • Нет связанных вопросов^_^