This is the mail archive of the libc-help@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: wrong decltype( INTN_C(value) )?



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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]