|
Message-ID: <alpine.LNX.2.11.1504172059320.11963@monopod.intra.ispras.ru> Date: Fri, 17 Apr 2015 21:24:09 +0300 (MSK) From: Alexander Monakov <amonakov@...ras.ru> To: musl@...ts.openwall.com Subject: Re: Explicit casts in ctype.h suppress compiler warnings > In another place (math.h) I removed this type of compound literal > usage because it was incompatible with C++, but the macros are > suppressed in C++ anyway. Still they might break -pedantic with > -std=c89. I do like this approach best in principle if it works > though, because the rules for when an error occurs are basically the > same as the rules for a real function. 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). > 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) Actually, thinking about GCC behavior a bit more, I was lucky that there's a warning for isspace in the first place: wrong argument to __isspace originates in the context of a system-header-declared macro, so generally I'd say that the same warning-suppression logic should have applied. Alexander
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.