Am Freitag, den 17.04.2015, 13:59 +0300 schrieb Alexander Monakov: > For the following erroneous source code: > > #include > int f(char *c) > { > return isdigit(c) || isspace(c); > } > > GCC warns only for passing a pointer to isspace; isdigit is implemented as a > macro that casts its argument to unsigned, and the warning is suppresed > because the origin of the cast is in a system header. Since isspace is > implemented with a static inline helper function, there is a warning. With > glibc headers, no warning is issued in either case for a similar reason. I generally think that casts are a bad idea, anyhow, and should only be used where it must be done, that is basically for pointer to integer conversion (and back). Code like this #define isdigit(a) (((unsigned)(a)-'0') < 10) can easily be replaced by #define isdigit(a) (((unsigned const){a}-'0') < 10) to change the explicit conversion to an implicit one in the initializer of the compound literal. Then, any compiler would have to diagnose if "a" would be a pointer. Jens -- :: INRIA Nancy Grand Est ::: Camus ::::::: ICube/ICPS ::: :: ::::::::::::::: office Strasbourg : +33 368854536 :: :: :::::::::::::::::::::: gsm France : +33 651400183 :: :: ::::::::::::::: gsm international : +49 15737185122 :: :: http://icube-icps.unistra.fr/index.php/Jens_Gustedt ::