Diese Art von Prototyp verwendet ein Makro __P
, um Aufnahme und Kompilierung auf sehr alten Systemen zu ermöglichen, die keine C90-Prototypen unterstützen (auch bekannt als ansi Prototypen).
Auf den meisten Systemen das Argument für den __P
Makro erweitert auf die Argumentliste, wie unten dargestellt:
#ifdef __USING_STONE_AGE_COMPILER__
#define __P(args) ()
#else
#define __P(args) args
int some_name __P((int argc, char *argv[]));
auf veralteten Systemen erweitert die obige Erklärung int some_name();
während es sonst zum vollständigen Prototyp erweitert: int some_name(int argc, char *argv[]);
Ignorieren Sie einfach das __P
Makro und verwenden Sie die Syntax some_name(arguments);
, um die Funktion aufzurufen. Beachten Sie auch, dass der Makroname __P
nicht signifikant ist, der Autor des Pakets könnte einen beliebigen Namen für diesen Zweck verwendet haben.
Könnten Sie die Header-Datei, die das enthält, verlinken, damit wir es uns ansehen können? –
Wo haben Sie solche Erklärungen gefunden? Kannst du eins zeigen? Es ist wahrscheinlich ein Makro, das sich zu etwas ausdehnt. – Banex
Dies ist der Link zu der Header-Datei [Link] (web.mit.edu/~jik/sipbsrc/i386_nbsd1/webster/src/server/dbm/PORT/sys/db.h/) Es hat so etwas wie void \t __dbanic __P ((DB * dbp)); Wie rufe ich __dbapanic an? Nur __dapanic (* dbp) oder auf andere Art und Weise –