linux-c-programming.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* RE: the rationale for defining macros for simple types?
@ 2006-08-10 15:35 Smith, Jason - VA
  2006-08-10 15:45 ` Robert P. J. Day
  2006-08-10 16:06 ` Robert P. J. Day
  0 siblings, 2 replies; 5+ messages in thread
From: Smith, Jason - VA @ 2006-08-10 15:35 UTC (permalink / raw)
  To: Robert P. J. Day, C programming list

Robert,

stdint.h is a part of glibc methinks, and not part of any blessed
standard that I am aware of.  What you probably want to include for the
int*_t types is <inttypes.h>, which found in /usr/(local/)?/include on
most of the common *nix's out there (might be part of a standard like
C99 too).

Typically these "convention-establishing" macros are only needed when
you need to get exact sizing for native types to compensate for word
size on multiple processor/OS/compiler combinations.  But they'll be
peppered with #ifdef wrappers for whatever dependent macro is defined
for the compiler/OS/processor you need to support.  In other words, what
inttypes.h is most likely already doing for you.

As a second opinion, I agree that those macros you have there are close
to worthless, as they are just abbreviated rehashes of the word-size
dependent native types.  Unless you have a compelling reason for making
the code less readable with no benefit over inttypes.h, I'd ditch those
macros.

Regards,
--jls 

P.S.  If you want your code to perform consistently across platforms
(and you don't care about absolute variable size), consider using the
"fast" (better speed, possible bigger size) or "least" (smaller size,
possibly slower) versions of int*_t's, such as int_fast32_t or
int_least32_t.

> -----Original Message-----
> From: linux-c-programming-owner@vger.kernel.org 
> [mailto:linux-c-programming-owner@vger.kernel.org] On Behalf 
> Of Robert P. J. Day
> Sent: Thursday, 10 August, 2006 07:58
> To: C programming list
> Subject: the rationale for defining macros for simple types?
> 
> 
>   a project that i inherited a while back contains a header 
> file with the following macros:
> 
> #ifndef UCHAR
> #define UCHAR   unsigned char
> #endif
> 
> #ifndef UINT
> #define UINT    unsigned short int
> #endif
> 
> #ifndef ULONG
> #define ULONG   unsigned long int
> #endif
> 
> #ifndef BOOL
> #define BOOL    unsigned int
> #endif
> 
> #ifndef TRUE
> #define TRUE    (1>0)
> #define FALSE   !TRUE
> #endif
> 
> 
> and proceeds to, naturally, define numerous variables using 
> those macros.  it's not clear why the original programmer 
> chose to do it this way rather than just use <stdint.h> and 
> things like uint8_t and so on.  i don't see any overwhelming 
> need to add yet another level of complexity when the standard 
> types would seem to do just fine.
> 
> also, i'm uncomfortable by the fact that "UINT" is defined as 
> being "unsigned short int", which is visually misleading.  
> not to mention that "unsigned long int" is machine-dependent, no?
> 
> is there a reason for having done it this way in the first 
> place that anyone knows of?  or can i just rip all that 
> nonsense out and use <stdint.h> types directly?  thanks.
> 
> rday
> -
> To unsubscribe from this list: send the line "unsubscribe 
> linux-c-programming" in the body of a message to 
> majordomo@vger.kernel.org More majordomo info at  
> http://vger.kernel.org/majordomo-info.html
> 
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread
* the rationale for defining macros for simple types?
@ 2006-08-10 11:58 Robert P. J. Day
  2006-08-10 20:57 ` Glynn Clements
  0 siblings, 1 reply; 5+ messages in thread
From: Robert P. J. Day @ 2006-08-10 11:58 UTC (permalink / raw)
  To: C programming list


  a project that i inherited a while back contains a header file with
the following macros:

#ifndef UCHAR
#define UCHAR   unsigned char
#endif

#ifndef UINT
#define UINT    unsigned short int
#endif

#ifndef ULONG
#define ULONG   unsigned long int
#endif

#ifndef BOOL
#define BOOL    unsigned int
#endif

#ifndef TRUE
#define TRUE    (1>0)
#define FALSE   !TRUE
#endif


and proceeds to, naturally, define numerous variables using those
macros.  it's not clear why the original programmer chose to do it
this way rather than just use <stdint.h> and things like uint8_t and
so on.  i don't see any overwhelming need to add yet another level of
complexity when the standard types would seem to do just fine.

also, i'm uncomfortable by the fact that "UINT" is defined as being
"unsigned short int", which is visually misleading.  not to mention
that "unsigned long int" is machine-dependent, no?

is there a reason for having done it this way in the first place that
anyone knows of?  or can i just rip all that nonsense out and use
<stdint.h> types directly?  thanks.

rday

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2006-08-10 20:57 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-10 15:35 the rationale for defining macros for simple types? Smith, Jason - VA
2006-08-10 15:45 ` Robert P. J. Day
2006-08-10 16:06 ` Robert P. J. Day
  -- strict thread matches above, loose matches on Subject: below --
2006-08-10 11:58 Robert P. J. Day
2006-08-10 20:57 ` Glynn Clements

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).