fixeria has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmocore/+/31496 )


Change subject: utils: use built-in static_assert() if available
......................................................................

utils: use built-in static_assert() if available

Static assertion is part of the C language since C11.  It produces
more readable [user supplied] error messages than:

  error: size of array ‘dummy_foo_bar’ is negative

and is generally smarter than the current osmo_static_assert()
implementation as it would fail when non-constant expression is
given, whereas osmo_static_assert() would have no effect at all.

See also https://en.cppreference.com/w/c/language/_Static_assert.

Change-Id: I5ca34bc14c05e8c38c721d7df33feb1c6c41c76e
---
M include/osmocom/core/utils.h
1 file changed, 29 insertions(+), 1 deletion(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/96/31496/1

diff --git a/include/osmocom/core/utils.h b/include/osmocom/core/utils.h
index ee7cfa4..482babc 100644
--- a/include/osmocom/core/utils.h
+++ b/include/osmocom/core/utils.h
@@ -4,6 +4,7 @@
 #include <stdint.h>
 #include <stdio.h>
 #include <string.h>
+#include <assert.h>

 #include <osmocom/core/backtrace.h>
 #include <osmocom/core/talloc.h>
@@ -79,7 +80,14 @@

 char *osmo_osmo_hexdump_nospc(const unsigned char *buf, int len) 
__attribute__((__deprecated__));

-#define osmo_static_assert(exp, name) typedef int dummy##name [(exp) ? 1 : -1] 
__attribute__((__unused__));
+#ifdef static_assert
+/* static_assert() is available in C11 or later */
+#define osmo_static_assert(exp, _name) \
+       static_assert((exp), "(" #exp ")")
+#else
+#define osmo_static_assert(exp, name) \
+       typedef int dummy##name [(exp) ? 1 : -1] __attribute__((__unused__));
+#endif

 void osmo_str2lower(char *out, const char *in)
        OSMO_DEPRECATED("Use osmo_str_tolower() or osmo_str_tolower_buf() 
instead,"

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/31496
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I5ca34bc14c05e8c38c721d7df33feb1c6c41c76e
Gerrit-Change-Number: 31496
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <[email protected]>
Gerrit-MessageType: newchange

Reply via email to