J'essaie de compiler un code d'affectation de pointeurs de fonction.
J'ai essayé différentes variantes d'assignations de pointeurs et __cdecl aussi.
Mais sans succès, après un moment j'ai abandonné ... peut-être que vous verrez quelque chose que je ne peux pas.erreur de pointeur de fonction C2373: redéfinition; différents types de modificateurs
Je compilez avec express visuel 2008, avec des drapeaux:
/Gd __cdecl convention d'appel
/O2 maximiser la vitesse
/compiler TC tous les fichiers comme .c
header:
#ifdef __cplusplus
extern "C" {
#endif
int __cdecl _intFunc(void); // tried without __cdelc as well
int (*_get_TYPE_MODE)(void) = NULL;
...
...
#ifdef __cplusplus
}
#endif
src:
int __cdecl _intFunc(void){return 0;}; // tried without __cdelc as well
_get_TYPE_MODE = _intFunc; // tried &_intFunc as well.
Ce produire des erreurs suivantes:
src \ s.c. (61): erreur C2373: '_get_TYPE_MODE': redéfinition; différents modificateurs de type
src \ hh (94): voir la déclaration de '_get_TYPE_MODE' src \ sc (61): C4047 Attention: 'initialisation': 'int' diffère du niveau d'indirection dans « int (__cdecl *) (void) »
EDIT:
Quand je change l'option du compilateur de/Gd à/Gz (fonctions comme __stdcall) pas de problème dans mon code se posent, mais dans d'autres endroits du code ne compilera pas.
Cela ne change rien ... et je ne comprends pas ce que fait le « style » a la question;) – bua
Apparemment, vous avez un compilateur impitoyable (je ne sais pas visual-studio-2008). Essayez d'ajouter 'extern' à la déclaration du pointeur de fonction dans le fichier d'en-tête (et gardez le' = NULL' là-bas) – pmg
Finalement, j'ai résolu cela avec: typedef int (* _int_Function) (void); _int_Fonction iF = _intFuct; Mais chaque pointeur de fonction s'est déplacé vers la structure. bonne nouvelle, extern travaillé aussi bien. Je ne voulais pas l'utiliser avant, mais je ne me souviens pas pourquoi ... hé, comment «citer» alias. dim le texte dans les commentaires? – bua