Re: [gtk-list] g_assert() and consorts into {}?
- From: Owen Taylor <owt1 cornell edu>
 
- To: gtk-list redhat com
 
- Subject: Re: [gtk-list] g_assert() and consorts into {}? 
 
- Date: Wed, 03 Dec 1997 09:25:56 -0500
 
> i'd like to see all the macros around g_assert () (return_if_fail...),
> to be enclosed by {}.
[ ... ]
> 
> any objections?
A good idea, but just {} is a bad idea - it can lead to warnings
(errors?) on some systems.
Here's how Perl does it:
/*
 * STMT_START { statements; } STMT_END;
 * can be used as a single statement, as in
 * if (x) STMT_START { ... } STMT_END; else ...
 *
 * Trying to select a version that gives no warnings...
 */
#if !(defined(STMT_START) && defined(STMT_END))
# if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(__cplusplus)
#   define STMT_START	(void)(	/* gcc supports ``({ STATEMENTS; })'' */
#   define STMT_END	)
# else
   /* Now which other defined()s do we need here ??? */
#  if (VOIDFLAGS) && (defined(sun) || defined(__sun__))
#   define STMT_START	if (1)
#   define STMT_END	else (void)0
#  else
#   define STMT_START	do
#   define STMT_END	while (0)
#  endif
# endif
#endif
We can probably just adopt this pretty much wholesale.
VOIDFLAGS is a #define which is true if 'void' is defined.
Since we don't care about pre-ANSI systems, we probably
can omit that. I'm not sure why SunOS (?) systems warn
about do { } while (0), but it doesn't cost much to
leave that in.
Regards,
                                        Owen
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]