Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编码时如何获取自定义函数执行地址?_C++_C_Pointers - Fatal编程技术网

C++ 编码时如何获取自定义函数执行地址?

C++ 编码时如何获取自定义函数执行地址?,c++,c,pointers,C++,C,Pointers,简单的代码,例如: void* print_my_address() { printf("%p\n", .../* get the execution address of print_my_address */) } 谢谢 PS:gcc v4.7 我可以通过编译器获取地址吗?与您对任何其他正则变量执行此操作的方式相同: void print_my_address() { printf("%p\n", &print_my_address); } 与处理任何其他正则变

简单的代码,例如:

void* print_my_address() {
    printf("%p\n", .../* get the execution address of print_my_address */)
}
谢谢

PS:gcc v4.7
我可以通过编译器获取地址吗?

与您对任何其他正则变量执行此操作的方式相同:

void print_my_address() 
{
    printf("%p\n", &print_my_address);
}

与处理任何其他正则变量的方法相同:

void print_my_address() 
{
    printf("%p\n", &print_my_address);
}

“执行地址”是什么意思?您的函数将始终具有相同的地址(
&print\u my\u address
),这不能更改。或者你是指当前堆栈帧的地址?@Nbr44是的,函数地址,但我在编译之前编码时如何获取它?@KaiWen,编译之前它没有地址。@KaiWen除了使用
和你的函数名
之外,你没有其他方法知道函数的地址。该地址不存在于你编写函数的文本文件中。编译和运行后,地址被分配,然后您可以引用它。您所说的“执行地址”是什么意思?您的函数将始终具有相同的地址(
&print\u my\u address
),这不能更改。或者你是指当前堆栈帧的地址?@Nbr44是的,函数地址,但我在编译之前编码时如何获取它?@KaiWen,编译之前它没有地址。@KaiWen除了使用
和你的函数名
之外,你没有其他方法知道函数的地址。该地址不存在于你编写函数的文本文件中。编译和运行后,将分配地址,然后您可以引用它。请注意,虽然允许使用
&
,但与获取普通变量的地址一样,它不是必需的。还要注意的是,指向函数的指针与普通指针的类型不同,因此也不能保证它能正常工作。@JerryCoffin您有相关的参考资料吗?从6.5.3.2开始:一元运算符和运算符的操作数应为函数指示符、[]或一元运算符*的结果,或为左值,用于指定不是位字段且未使用寄存器存储类说明符声明的对象。函数指针与任何其他指针的类型不兼容(我相信C99允许它们与
(void*)
兼容,但我希望您在传递到
printf()
时需要强制转换它)但是,JerryCoffin的意思是,您不需要使用
&
,因为
&print\u my\u address
完全等同于指针上下文中的
print\u my\u address
。@Yuushi:C99,§6.3.2.1/4:“除非它是sizeof运算符的操作数)或一元运算符,将类型为“函数返回类型”的函数指示符转换为类型为“指向函数返回类型的指针”的表达式。就不兼容而言(§7.19.6.1):“p参数应为指向void的指针。”@Yuushi:结束(§6.5.2.2/6):如果函数是用包含原型的类型定义的,并且原型以省略号(,…)结尾,或者升级后的参数类型与参数类型不兼容,则行为是未定义的。“默认升级不包括从指针到函数到指针到无效的升级。请注意,虽然允许使用
&
,就像获取普通变量的地址一样,但这不是必需的。”。还要注意的是,指向函数的指针与普通指针的类型不同,因此也不能保证它能正常工作。@JerryCoffin您有相关的参考资料吗?从6.5.3.2开始:一元运算符和运算符的操作数应为函数指示符、[]或一元运算符*的结果,或为左值,用于指定不是位字段且未使用寄存器存储类说明符声明的对象。函数指针与任何其他指针的类型不兼容(我相信C99允许它们与
(void*)
兼容,但我希望您在传递到
printf()
时需要强制转换它)但是,JerryCoffin的意思是,您不需要使用
&
,因为
&print\u my\u address
完全等同于指针上下文中的
print\u my\u address
。@Yuushi:C99,§6.3.2.1/4:“除非它是sizeof运算符的操作数)或一元运算符,将类型为“函数返回类型”的函数指示符转换为类型为“指向函数返回类型的指针”的表达式。就不兼容而言(§7.19.6.1):“p参数应为指向void的指针。”@Yuushi:结束(§6.5.2.2/6):“如果函数是使用包含原型的类型定义的,并且原型以省略号(,…)结尾,或者升级后的参数类型与参数类型不兼容,则行为未定义。”默认升级不包括从指针到函数到指针到空值的升级。