wrong decltype( INTN_C(value) )?

Adhemerval Zanella adhemerval.zanella@linaro.org
Mon Mar 28 12:30:00 GMT 2016



On 27-03-2016 17:54, Yaron Cohen-Tal wrote:
> Hi,
> 
> I was wondering: according to the C99 standard (I couldn't get hold of
> the C11 standard) it seems like e.g. "INT8_C" should have the type
> "int_least8_t". From section 7.18.4.1:
> 
> "The macro INTN_C(value) shall expand to a signed integer constant
> with the specified value and type int_leastN_t"
> 
> However, on my system (Debian 8 x64) "INT8_C(1)" expands to "1" which
> has type "int" (which is 32 bit) whereas "int_least8_t" has type
> "signed char" (which is 8 bit). So is glibc not conformant to the
> standard here, or there's anything I misunderstand? I'd expact it to
> expand to "((signed char)1)".
> 

My understanding is it falls to:

7.18.4 Macros for integer constants

3. Each invocation of one of these macros shall expand to an integer
   constant expression suitable for use in #if preprocessing directives.
   The type of the expression shall have the same type as would an
   expression of the corresponding type *converted according to the
   integer promotions*. The value of the expression shall be that of
   the argument.

Since it it should use default C99 integer promotions the macro should
not promote to smaller than int types.



More information about the Libc-help mailing list