Mercurial > hg > octave-kai > gnulib-hg
changeset 6302:71bde2024cdc
(verify_expr): Remove, replacing with:
(verify_true): New macro that returns true instead of void.
(verify_type__): Remove.
(verify): Use verify_true rather than verify_type__.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Tue, 27 Sep 2005 05:36:30 +0000 |
parents | 015760832874 |
children | 563c73f35d69 |
files | lib/verify.h |
diffstat | 1 files changed, 16 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/verify.h +++ b/lib/verify.h @@ -23,24 +23,26 @@ /* Each of these macros verifies that its argument R is a nonzero constant expression. To be portable, R's type must be integer (or - boolean). Unlike assert, there is no run-time overhead. */ + boolean). Unlike assert, there is no run-time overhead. -/* A type that is valid if and only if R is a nonzero constant expression. - The symbols verify_type__ and verify_error_if_negative_size__ are - private to this header file. */ + There are two macros, since no single macro can be used in all + contexts in C. verify_true (R) is for scalar contexts, where it + may be cast to void if need be. verify (R) is for declaration + contexts, e.g., the top level. -# define verify_type__(R) \ - struct { unsigned int verify_error_if_negative_size__ : (R) ? 1 : -1; } + The symbols verify_error_if_negative_size__ and verify_function__ + are private to this header. */ -/* Verify requirement R at compile-time, as a declaration. */ - -# define verify(R) \ - extern int (* verify_function__ (void)) [sizeof (verify_type__ (R))] +/* Verify requirement R at compile-time, as an integer constant expression. + Return true. */ -/* Verify requirement R at compile-time, as an expression. - This macro can be used in some contexts where verify cannot, and vice versa. - Return void. */ +# define verify_true(R) \ + (!!sizeof \ + (struct { unsigned int verify_error_if_negative_size__ : (R) ? 1 : -1; })) -# define verify_expr(R) ((void) ((verify_type__ (R) *) 0)) +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. */ + +# define verify(R) extern int (* verify_function__ (void)) [verify_true (R)] #endif