Ce type de prototype utilise une macro __P
pour permettre l'inclusion et la compilation sur de très vieux systèmes qui ne supportent pas les prototypes C90 (aka ansi prototypes).
Sur la plupart des systèmes, l'argument de la macro __P
étend à la liste des arguments, comme illustré ci-dessous:
#ifdef __USING_STONE_AGE_COMPILER__
#define __P(args) ()
#else
#define __P(args) args
int some_name __P((int argc, char *argv[]));
Sur les systèmes obsolètes, la déclaration ci-dessus se développe pour int some_name();
alors qu'il se développe au prototype complet autrement: int some_name(int argc, char *argv[]);
ignorer la __P
macro et utiliser some_name(arguments);
syntaxe pour appeler la fonction. Notez également que le nom de la macro __P
n'est pas significatif, l'auteur du package aurait pu utiliser n'importe quel nom à cette fin.
Pourriez-vous lier le fichier d'en-tête qui inclut cela afin que nous puissions y jeter un coup d'œil? –
Où avez-vous trouvé ces déclarations? Pouvez-vous en montrer un? C'est probablement une macro qui s'étend à quelque chose. – Banex
Ceci est le lien vers le fichier d'en-tête [Link] (web.mit.edu/~jik/sipbsrc/i386_nbsd1/webster/src/server/dbm/PORT/sys/db.h/) Il a quelque chose comme vide \t __dbpanic __P ((DB * dbp)); Comment puis-je appeler __dbapanic? Juste __dapanic (* dbp) ou d'une autre manière –