mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-22 05:48:01 +01:00
WUtil: New macro 'wlengthof' in the public API to get number of elements in an array
The new macro 'wlengthof' returns the number of elements for which a local array have been defined, which makes code easier to read than the previous [sizeof() / sizeof([0]) ] construct. The macro includes a static assertion to stop compilation if it is being used on a pointer, for which we cannot know the size of the array, to avoid generating dummy result. This can work only with C11 which standardised the static assertions. Signed-off-by: Christophe CURIS <christophe.curis@free.fr>
This commit is contained in:
committed by
Carlos R. Mafra
parent
c3a132215d
commit
fd47650717
@@ -88,6 +88,27 @@
|
|||||||
#endif /* !NDEBUG */
|
#endif /* !NDEBUG */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef static_assert
|
||||||
|
# define _wutil_static_assert(check, message) static_assert(check, message)
|
||||||
|
#else
|
||||||
|
# ifdef __STDC_VERSION__
|
||||||
|
# if __STDC_VERSION__ >= 201112L
|
||||||
|
/*
|
||||||
|
* Ideally, we would like to include <assert.h> to have 'static_assert'
|
||||||
|
* properly defined, but as we have to be sure about portability and
|
||||||
|
* because we're a public header we can't count on 'configure' to tell
|
||||||
|
* us about availability, so we use the raw C11 keyword
|
||||||
|
*/
|
||||||
|
# define _wutil_static_assert(check, message) _Static_assert(check, message)
|
||||||
|
# else
|
||||||
|
# define _wutil_static_assert(check, message) /**/
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define _wutil_static_assert(check, message) /**/
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
@@ -182,6 +203,16 @@ typedef void WMNotificationObserverAction(void *observerData,
|
|||||||
WMNotification *notification);
|
WMNotification *notification);
|
||||||
|
|
||||||
|
|
||||||
|
/* ---[ Macros ]---------------------------------------------------------- */
|
||||||
|
|
||||||
|
#define wlengthof(array) \
|
||||||
|
({ \
|
||||||
|
_wutil_static_assert(sizeof(array) > sizeof(array[0]), \
|
||||||
|
"the macro 'wlengthof' cannot be used on pointers, only on known size arrays"); \
|
||||||
|
sizeof(array) / sizeof(array[0]); \
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
/* ---[ WINGs/memory.c ]-------------------------------------------------- */
|
/* ---[ WINGs/memory.c ]-------------------------------------------------- */
|
||||||
|
|
||||||
void* wmalloc(size_t size);
|
void* wmalloc(size_t size);
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ WINGS_VERSION=$WINGS_CURRENT:$WINGS_REVISION:$WINGS_AGE
|
|||||||
AC_SUBST(WINGS_VERSION)
|
AC_SUBST(WINGS_VERSION)
|
||||||
dnl
|
dnl
|
||||||
dnl libWUtil
|
dnl libWUtil
|
||||||
WUTIL_CURRENT=3
|
WUTIL_CURRENT=4
|
||||||
WUTIL_REVISION=0
|
WUTIL_REVISION=0
|
||||||
WUTIL_AGE=0
|
WUTIL_AGE=0
|
||||||
WUTIL_VERSION=$WUTIL_CURRENT:$WUTIL_REVISION:$WUTIL_AGE
|
WUTIL_VERSION=$WUTIL_CURRENT:$WUTIL_REVISION:$WUTIL_AGE
|
||||||
|
|||||||
Reference in New Issue
Block a user