On Thu, Apr 30, 2015 at 07:58:33AM -0400, Trevor Saunders wrote: > On Thu, Apr 30, 2015 at 08:54:05AM +0200, Andreas Schwab wrote: > > Trevor Saunders <tbsau...@tbsaunde.org> writes: > > > > >> diff --git a/libobjc/encoding.c b/libobjc/encoding.c > > >> index 7333908..20ace46 100644 > > >> --- a/libobjc/encoding.c > > >> +++ b/libobjc/encoding.c > > >> @@ -1167,7 +1167,7 @@ objc_layout_structure_next_member (struct > > >> objc_struct_layout *layout) > > >> /* Record must have at least as much alignment as any field. > > >> Otherwise, the alignment of the field within the record > > >> is meaningless. */ > > >> -#ifndef PCC_BITFIELD_TYPE_MATTERS > > >> +#if !PCC_BITFIELD_TYPE_MATTERS > > > > With `#define PCC_BITFIELD_TYPE_MATTERS true' this expands to `#if > > !true' which evaluates to 1 since true isn't a defined identifier? > > I think true is a defined identifier since this is compiled as c11.
true is not a defined identifier, neither in C89, nor in C99, nor in C11. In C, true may be a macro if stdbool.h is included. system.h has: #undef TRUE #undef FALSE #ifdef __cplusplus /* Obsolete. */ # define TRUE true # define FALSE false #else /* !__cplusplus */ # undef bool # undef true # undef false # define bool unsigned char # define true 1 # define false 0 /* Obsolete. */ # define TRUE true # define FALSE false #endif /* !__cplusplus */ if it is included. Jakub