[英]Is there a way to set a return address for a function in C
所以我知道__builtin_return_address(0)
将显示返回地址是什么,但我想知道是否有办法手动设置它。 C 或任何其他编程语言是否支持这种功能? 我试过在网上搜索它,但我找不到太多。
谢谢!
有一种方法,但它很复杂。 您需要使用setjmp和longjmp并且需要注意返回点发生的情况,否则会创建无限循环。
PS 注意,如果你longjmp到另一个函数而不是main()
,你不能使用它的返回类型,但必须使用stdlib.h的exit()
函数或longjmp到另一个有效位置
PPS 另一个有趣的功能,您可能也会喜欢所谓的“标签作为值”: https : //gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
jmp_buf env_a, env_b;
typedef enum _returntype{
RETURN_A,
RETURN_B
} RETURNTYPE;
void function(RETURNTYPE r){
switch(r){
case RETURN_A :
longjmp(env_a, 1);
case RETURN_B :
longjmp(env_b, 1);
}
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[]){
char character = 'A';
if(setjmp(env_a) != 0){
printf("returned from env_a, character=%c\n", character);
goto END;
}
character = 'B';
if(setjmp(env_b) != 0){
printf("returned from env_b, character=%c\n", character);
goto END;
}
function(RETURN_A); /* or you might use function(RETURN_B); */
END:
return EXIT_SUCCESS;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.