|
|
Message-ID: <20150417183511.GJ2875@port70.net>
Date: Fri, 17 Apr 2015 20:35:12 +0200
From: Szabolcs Nagy <nsz@...t70.net>
To: musl@...ts.openwall.com
Subject: Re: Explicit casts in ctype.h suppress compiler warnings
* Alexander Monakov <amonakov@...ras.ru> [2015-04-17 21:24:09 +0300]:
>
> I confirm that the idea works, and as Rich said it causes a warning with
> -pedantic -std=c89 with gcc-4.5..4.7 (but not 4.8, 4.9).
>
i assume we could use compound literals in c89 with __extension__
> > Do you have an idea in mind for how we could achieve that? I suspect
> > the macros are still better optimizable than the inline function
> > approach, so I'd lean towards doing a macro that avoids evaluating c
> > and just checks its type, which would involve using ?: I think.
>
> I admit I was thinking of doing isspace-style inlines everywhere, but thanks
> to your suggestion I was able to come up with this:
>
> static __inline void __is_int(int a) {}
> #define isdigit(a) (__is_int(0?(a):0), ((unsigned)(a)-'0') < 10)
>
i think using :0 there is not useful because null
pointer constants are special in ?:
i think rich meant something like
#define isdigit(a) (((0?1U:(a))-'0') < 10)
which works when the conversion rank of a is <= unsigned
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.