C++ 如何查看在运行时将哪个函数分配给函数指针。。? #包括 整数相加(整数i,整数j) { printf(“\n%s\n”,函数); 回报(i*j); } 整数(*fp)(整数,整数); void main() { int j=2; int i=5; printf(“\n%s\n”,函数); fp=相加; printf(“\n%d\n”,(*fp)(2,5)); printf(“\n%s\n”,*fp); }
您可以将函数指针与函数指针进行比较。像这样:C++ 如何查看在运行时将哪个函数分配给函数指针。。? #包括 整数相加(整数i,整数j) { printf(“\n%s\n”,函数); 回报(i*j); } 整数(*fp)(整数,整数); void main() { int j=2; int i=5; printf(“\n%s\n”,函数); fp=相加; printf(“\n%d\n”,(*fp)(2,5)); printf(“\n%s\n”,*fp); },c++,c,C++,C,您可以将函数指针与函数指针进行比较。像这样: #include<stdio.h> int add(int i,int j) { printf("\n%s\n",__FUNCTION__); return (i*j); } int (*fp)(int,int); void main() { int j=2; int i=5; printf("\n%s\n",__FUNCTION__);
#include<stdio.h>
int add(int i,int j)
{
printf("\n%s\n",__FUNCTION__);
return (i*j);
}
int (*fp)(int,int);
void main()
{
int j=2;
int i=5;
printf("\n%s\n",__FUNCTION__);
fp=add;
printf("\n%d\n",(*fp)(2,5));
printf("\n%s\n",*fp);
}
没有其他(标准)方法1
这个
是一个编译错误
有一些特定于平台的方法。对于linux,这是可行的:
printf("\n%s\n",*fp);
#包括
#包括
整数相加(整数i,整数j)
{
printf(“\n%s\n”,函数);
回报(i*j);
}
整数(*fp)(整数,整数);
联盟
{
整数(*fp)(整数,整数);
无效*fp1;
}fpt;
int main()
{
fp=相加;
fpt.fp=fp;
char**funName=backtrace_符号(&fpt.fp1,1);
printf(“%s\n”,*funName);
}
<代码>什么是“空main”,为什么这个带有正确编译器设置的C++(?)?链接器只是确保每个对add
的引用都指向同一个地方,但是名称“add”不会保留,除非您特别保留它。@nijansenmain
是程序启动的地方void main()
是一种在独立环境中编写主函数的实现特定方法,完全符合C标准。还有其他方法,你很难解析可执行文件的符号表并在那里查找地址。@AdamRosenfield这些都是特定于平台的(就像回溯的技巧)。我的意思是,没有标准ways@Blinux上的“-rdynamic”选项需要传递给gcc以获取函数的名称。
printf("\n%s\n",*fp);
#include<stdio.h>
#include <execinfo.h>
int add(int i,int j)
{
printf("\n%s\n",__FUNCTION__);
return (i*j);
}
int (*fp)(int,int);
union
{
int (*fp)(int,int);
void* fp1;
} fpt;
int main()
{
fp=add;
fpt.fp=fp;
char ** funName = backtrace_symbols(&fpt.fp1, 1);
printf("%s\n",*funName);
}