2014-02-26 39 views
0

我需要在此方面的幫助: 編譯時,我把從'int *'警告C4047,指針的功能

得到錯誤4047

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

的不同之處間接水平我如何能夠擺脫這個問題?

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; 
    } 
+1

是函數應該返回什麼? –

+0

顯然你的函數將int作爲返回值而不是int * –

回答

0

我認爲這是你在找什麼

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

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

f要麼putsprintf。希望能幫助到你。

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; 
} 
+0

getPuts()的可讀性較差的原型(不使用返回值的typedef)是:int(* getPuts(void))(const char *) ;'。顯然使用typedef是要走的路。 –