Messages in this thread | | | From | Herbert Rosmanith <> | Subject | Re: [IDEA+RFC] Possible solution for min()/max() war | Date | Wed, 29 Aug 2001 21:11:57 +0200 (MET DST) |
| |
> From: Helge Hafting <helgehaf@idb.hist.no> > X-Mailer: Mozilla 4.76 [no] (X11; U; Linux 2.4.10-pre1 i686) > X-Accept-Language: no, en > To: Brad Chapman <kakadu_croc@yahoo.com>, linux-kernel@vger.kernel.org > Subject: Re: [IDEA+RFC] Possible solution for min()/max() war > References: <20010828204207.12623.qmail@web10908.mail.yahoo.com> > Sender: linux-kernel-owner@vger.kernel.org > Precedence: bulk > X-Mailing-List: linux-kernel@vger.kernel.org > > Brad Chapman wrote: > > > > Then why, IIRC, are the kernel hackers so upset about how > > the three-arg macros _prevent_ signed/unsigned comparisons? > > Apparently the ability to compare > > signed/unsigned variables must have _some_ significance.... > > You are misunderstanding this. > It is possible to write something that _looks like_ a signed to unsigned > comparison, i.e.: > int a; > unsigned int b; > ... > x = min(a,b); > > Looks like a signed to unsigned comparison - but it isn't! > > You see, the compiler always does an _implicit_ cast in cases like this. ^^^^^^^^^^^^^^^^^^^^^
if that's your concern, we can easily fix this by still moving min/max to its same form.
#define type_min(type,x,y) \ ({ type __x = (x), __y = (y); __x < __y ? __x: __y; }) #define type_max(type,x,y) \ ({ type __x = (x), __y = (y); __x > __y ? __x: __y; })
#define min(x,y) type_min(typeof(x),x,y) #define max(x,y) type_max(typeof(x),x,y)
no _implicit_ cast and ...
> One of the arguments gets changed invisibly, and that is what kernel > developers are so upset about. You don't really know which one without > thinking hard about it, and that is a source of many hard-to-find bugs.
... joy, we would even know which one.
-- mfg, Dipl.-Ing. H.Rosmanith Karrer & Partner Gesellschaft mbH Freistaedter Str. 236, A-4040 Linz, Tel. +43/732/75 71 30 Fax. +43/732/75 71 44
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |