Date: Tue, 13 Apr 2004 17:40:41 +0100 From: Matthew Seaman <m.seaman@infracaninophile.co.uk> To: Brian Henning <b1henning@hotmail.com> Cc: freebsd-questions@freebsd.org Subject: Re: stdio.h Message-ID: <20040413164041.GB94448@happy-idiot-talk.infracaninophile.co.uk> In-Reply-To: <BAY15-DAV48beUzmRf6000210b2@hotmail.com> References: <BAY15-DAV48beUzmRf6000210b2@hotmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--St7VIuEGZ6dlpu13 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Apr 13, 2004 at 09:45:39AM -0500, Brian Henning wrote: > I have a question about the stdio.h file. >=20 > In the following function signature what does the __P do?=20 >=20 > Why is the __P needed? >=20 > int (*_close) __P((void *)); History. Backwards compatability. This construct dates from the times of K&R C, before the ANSI standard that said function prototypes should contain argument type declarations. If you examine the <sys/cdefs.h> header file, you'll see that macro is designed to expand to either an empty pair of brackets -- () -- which is the old-style prototype, or the string enclosed within it -- (void *) -- which is the "new" style prototype. I say "new" because prototypes like that have been standard for more than 10 years. On any compiler you encounter nowadays that declaration will be resolved to: int (*_close) (void *) meaning _close is a pointer to a function taking an arbitrary pointer as argument and returning an int. Yes -- the __P() construct is pretty much obsolete nowadays, but it's probably more trouble than it's worth to try and strip it out of everything. Cheers, Matthew --=20 Dr Matthew J Seaman MA, D.Phil. 26 The Paddocks Savill Way PGP: http://www.infracaninophile.co.uk/pgpkey Marlow Tel: +44 1628 476614 Bucks., SL7 1TH UK --St7VIuEGZ6dlpu13 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (FreeBSD) iD8DBQFAfBgJdtESqEQa7a0RAkrZAJ0Z7c5IIY78ofF7u4Bqm7iynkcD2gCfUes1 ApZtrsWa6yFlQymwJsOSHnM= =OLM4 -----END PGP SIGNATURE----- --St7VIuEGZ6dlpu13--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040413164041.GB94448>