函数指针对具有多个参数的函数进行寻址


函数

指针是否有可能使用相同返回类型的不同参数编号对函数进行寻址,如果没有任何替代参数会有所帮助.. 提前致谢

例:

struct method
{
    char *name;
    void (*ptr)(?);  //? : what to define as arguments for this
};
void fun1(char *name)
{
    printf("name %snr",name);
}
void fun2(char *name, int a)
{
    printf("name %s %dnr",name,a);
}
//defined before main()
method def[]=
{
    {"fun1",fun1},
    {"fun2",fun2}
}
//some where in main()
//call for function pointer
def[1].ptr("try", 2);
typedef void (*myfunc)(char *,int);
struct method
{
    char *name;
    myfunc ptr;  
};
method def[]=
{
     //we store fun1 as myfun 
     //type void(char*,int) and use it this way
    {"fun1",(myfunc)fun1},
    {"fun2",fun2}
};

从理论上讲,这是未定义的行为,但实际上它应该适用于大多数平台
* 编辑 -> 这适用于所有平台,就像 printf(const char*,...) 一样。

在 C 中,你可以让你的函数指针声明读取

void (*ptr)(); 

这意味着"指向返回 void 并期望未指定数量的参数的函数的指针"。

通过这种调整,您的示例程序可以按我的预期工作。然而,很可能你在这里冒险进入未定义(或至少是实现定义的)领域 - 我不确定,我不是语言律师(但是有很多语言律师经常光顾SO,所以我相信有人可以鞭策标准的相关部分或证明没有)。所以也许你应该宁愿使用

/* Here be dragons! */
void (*ptr)();

相反。

解决方案 #1:

void fun1(char *name, ...);
void fun2(char *name, ...);

解决方案#2:

method def[]=
{
    {"fun1",printf},
    {"fun2",printf}
}

最新更新