From owner-freebsd-arch Fri Feb 1 8:53:17 2002 Delivered-To: freebsd-arch@freebsd.org Received: from rover.village.org (rover.bsdimp.com [204.144.255.66]) by hub.freebsd.org (Postfix) with ESMTP id E7BFE37B419 for ; Fri, 1 Feb 2002 08:53:09 -0800 (PST) Received: from harmony.village.org (harmony.village.org [10.0.0.6]) by rover.village.org (8.11.3/8.11.3) with ESMTP id g11Gr7o42156; Fri, 1 Feb 2002 09:53:07 -0700 (MST) (envelope-from imp@village.org) Received: from localhost (warner@rover2.village.org [10.0.0.1]) by harmony.village.org (8.11.6/8.11.6) with ESMTP id g11Gr5L03596; Fri, 1 Feb 2002 09:53:05 -0700 (MST) (envelope-from imp@village.org) Date: Fri, 01 Feb 2002 09:52:30 -0700 (MST) Message-Id: <20020201.095230.12730857.imp@village.org> To: bde@zeta.org.au Cc: estabur@hotmail.com, arch@FreeBSD.ORG Subject: Re: __P macro question From: "M. Warner Losh" In-Reply-To: <20020202012011.U3304-100000@gamplex.bde.org> References: <20020202012011.U3304-100000@gamplex.bde.org> X-Mailer: Mew version 2.1 on Emacs 21.1 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG In message: <20020202012011.U3304-100000@gamplex.bde.org> Bruce Evans writes: : > Are you perhaps objecting to the type of the last parameter : > ("int format" vs "char format")? Please see Ansi Classic, chapter : > "3.5.4.3 Function declarators (including prototypes)", in particular : > page 69 lines 19-22. In C99, 6.7.5.3 paragraph #11 seems to apply : > similarly. : : Right. I don't trust anyone who is not familiar with this point to : globally remove __P. So do I qualify? We all know that the original poster of the comment didn't understand this subtlty. :-) : People removing __P should also be familiar with the gcc conterpoint: : : void foo(char); /* Wrong; should be "void foo(int);". */ : void foo(c) char c; {} : : gives undefined behaviour in Standard C, but gcc defines its behaviour : to be do-what-naive-programmer-expects. This is only safe provided the : wrong prototype for foo() is always in scope before foo() is called; : otherwise foo() is sometimes passed an int and sometimes a char, but : foo() expects to be passed either an int or a char depending on whether : the wrong prototype is in scope for the function body. Alternatively: void foo(char); void foo(char c) { } would be right. :-) I've already found three places where this didn't hold. So what is the right style: 1) ^static void foo(char); 2) ^staticvoid foo(char); 3) ^static voidfoo(char); 4) ^staticvoidfoo(char); Most of the tree I've looked at so far uses #1. I'm a little reluctant to change that part of things on this pass. Warner To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message