2010-05-30 2 views
1

Отказ от ответственности, я ничего не делаю в частности в отношении этого вопроса, просто любопытно.C адрес инструкции

Возможно ли получить адрес инструкции или блока в C? в сущности, есть ли прыжок в C?

, например:

void function() { 
    int k; 
    { // is a possible to go to this address from arbitrary point in code? 
     int i, j; 
     k += j+i; 
    } 
} 

спасибо

+0

@James нет, я только что прочитал о закрытии и мысли (только как упражнение), если можно сделать это на C. так что нет конкретной платформы – Anycorn

ответ

3

Я думаю, что ближайший вы можете прийти с использованием стандартных методов является setjmp и longjump. Они не смогут получить доступ к фактическому адресу, потому что объект jmp_buf непрозрачен.

+0

прохладный. Я не знал об этом. благодаря – Anycorn

3

Да, используйте goto:

void function() { 
    int k; 
    { // is a possible to go to this address from arbitrary point in code? 
myLabel: 
     int i, j; 
     k += j+i; 
    } 

// stuff 

    goto myLabel; 
} 
+0

, но перейдите в область? Или это не так? – Anycorn

+0

Goto не берет адрес. Возможно, вы думали о методах как ценности, расширение GCC? http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html –

+0

«произвольная точка в коде» - я не понимал, что вы подразумеваете буквально * везде * в своей программе. Да, goto только для функции. Для любого места в коде, да, setjmp/longjump - ваш человек. –

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