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”不会保留,除非您特别保留它。@nijansen
main
是程序启动的地方
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);
}