Ich habe ein Makro wie folgt definiert:Wie behebe ich diese Warnung zum Übergeben eines Funktionszeigers an einen Makro in C?
#define _call(func_name, __func_proto, ...) { \
void *_handle; \
int result = !CERR_V_SUCCESS; \
\
_handle = dlopen(_DLL_NAME,GLOBAL); \
if (_handle) { \
__func_proto = dlsym(dll_handle, func_name); \
if (__func_proto) { \
result = (*__func_proto)(__VA_ARGS__); \
} \
(void)dlclose(_handle); \
} \
return (result); \
}
ich so dieses Makro mit verschiedenen Funktionszeiger nenne:
_call("download",_download,src,dst);
_call("upload",_upload,src,dst);
_call("test",_test,file);
und die Funktionszeiger als
int (*_download)(int *,int *);
int (*_upload)(int *,int*);
int (*_test)(int *,char*);
definiert Diese führt zu einer Warnung a value of type "void *" cannot be assigned to an entity of type "int (*)(int*,int*)"
.
Wie kann ich diese Warnung beheben?
Ist das Ihr eigentliches Makro? – molbdnilo
Ja, ich habe dieses Makro definiert, um einige DLLs zu laden, ich habe hier keine Definition hinzugefügt, aber es hat auch Definitionen – mjht
Sieht aus wie Cast fehlt, aber ohne das eigentliche Makro ist es schwer zu sagen – buld0zzr