警告C4047,指向功能

时间:2014-02-26 11:54:54

标签: pointers

我需要一些帮助: 在编译时,我不断收到错误4047

warning C4047: 'return' : 'int (__cdecl *)(const char *,...)'

'int *'

的间接等级不同

我怎么能摆脱这个问题?

    int (*GetPrintfPointer(void))(const char *format, ...) 
    {
       int *pPrintf;
       pPrintf = (int *)printf;
       return pPrintf;
    }


    int (*GetPutsPointer(void))(const char *str)
    {
       int *pPuts; 
       pPuts = (int *)puts;
       return pPuts;
    }

2 个答案:

答案 0 :(得分:1)

我认为这就是你要找的东西

int f(const char *){
    return 1;
}

int (*GetPutsPointer(void))(const char *str)
{
   return f;
}

对您f来说是putsprintf。希望它有所帮助。

答案 1 :(得分:1)

使用typedef时很简单:

#include "stdio.h"

typedef int (*pPrintf)(const char*,...);
typedef int (*pPuts)(const char*);

pPrintf getPrintf(void)
{
    return &printf;
}
//or if this is what you've tried to do:
int* getPrintfAsIntPointer(void)
{
    return (int*)&printf;
}

pPuts getPuts()
{
    return &puts;
}

int main()
{
    getPrintf()("%s\n","hello world");
    getPuts()("hello world\n");
    return 0;
}