lkml.org 
[lkml]   [2008]   [Mar]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
FromSegher Boessenkool <>
SubjectRe: [PATCH 1/2] Add C99-style constructor macros for specific-sized integers
DateMon, 3 Mar 2008 04:20:37 +0100
> Although it is fully legal and correct C to write something like:
>
> (u64)0x123456789abcdef
>
> .. gcc will issue a warning on 32-bit systems that 0x123456789abcdef
> is too big for an "int", and that it has been transparently promoted,
> even though it is obvious that that is what the user intended in the
> first place.

[It says it is too big for 'long', actually].

That's because this is not valid ISO C90. GCC tries to help you out
by using the C99 rules (it has to do something, and terminating with
an error would be a bit rude). Perhaps the kernel should use C99
mode (-std=gnu99, to get the GNU C extensions).

> +#define S8_C(x) x
> +#define U8_C(x) x ## U
> +#define S16_C(x) x
> +#define U16_C(x) x ## U
> +#define S32_C(x) x
> +#define U32_C(x) x ## U

These are unnecessary, Linux requires an int to be at least 32 bits.

> +#define S64_C(x) x ## LL
> +#define U64_C(x) x ## ULL

Here you can use LL resp. ULL on all archs.


Do these new macros really buy anything over just writing LL in the
few places that 64-bit constants are used?


Segher



\
 
 \ /
  Last update: 2008-03-03 04:23    [from the cache]
©2003-2010