PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was bedeutet __P



f0rtex
21-12-2002, 18:09
Hallo Leute

bin mir gerade den Quelltext von write am ankucken. Da kommen folgende Definitionen von Prototypen vor:


void done __P((int));
void do_write __P((char *, char *, uid_t));
static void usage __P((void));
int term_chk __P((char *, int *, time_t *, int));
void wr_fputs __P((unsigned char *s));
void search_utmp __P((char *, char *, char *, uid_t));
int utmp_chk __P((char *, char *));


Nun, was bedeutet dieses __P? Für was ist es gut? Was wird damit erreicht?

MfG
f0rtex

SeeksTheMoon
21-12-2002, 21:51
"void done __P((int));"

öhm, ist das vielleicht eine Funktion? Aber warum sind da noch zusätzliche Klamern drin? Wenn da nicht noch "done" davor stehen würde, dann würde ich am ehesten auf eine Funktion tippen oder es ist eine Zeichenkette, die vom Präprozessor durch was anderes ersetzt wird.

Was werden denn für header eingebunden? Wo hast Du denn den Code her? Das ist recht wenig, um auf die Funktionsweise schließen zu können...

anda_skoa
21-12-2002, 22:04
Wahrscheinlich ein Macro.

Ciao,
_

f0rtex
22-12-2002, 12:17
@SeeksTheMoon: Sorry das ich die Headers nicht gepostet habe. :rolleyes:
Habe das Makro dann in der Headerdatei sys/cdefs.h gefunden.

Es handelt sich um den Sourcecode vom Kommando write.



/* GCC can always grok prototypes. For C++ programs we add throw()
to help it optimize the function calls. But this works only with
gcc 2.8.x and egcs. */
# if defined __cplusplus && __GNUC_PREREQ (2,8)
# define __THROW throw ()
# else
# define __THROW
# endif
# define __P(args) args __THROW
/* This macro will be used for functions which might take C++ callback
functions. */
# define __PMT(args) args

#else /* Not GCC. */

# define __inline /* No inline functions. */

# define __THROW
# define __P(args) args
# define __PMT(args) args


Soll damit eine Art exception handling erreicht werden oder was?