sizeof.h: Add SIZEOF_ARRAY() macro

This makes it safe to call sizeof() on an array.  Calling sizeof()
directly on an array is dangerous, because if the array changes to be a
pointer, the behavior will unexpectedly change.  It's the same problem
as with NITEMS().

Link: <https://stackoverflow.com/a/57537491>
Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
This commit is contained in:
Alejandro Colomar
2023-07-30 14:29:45 +02:00
committed by Iker Pedrosa
parent 49ea7327d9
commit e299942189
+4 -3
View File
@@ -15,9 +15,10 @@
#include "must_be.h"
#define WIDTHOF(x) (sizeof(x) * CHAR_BIT)
#define NITEMS(a) (sizeof((a)) / sizeof((a)[0]) + must_be_array(a))
#define STRLEN(s) (NITEMS(s) - 1)
#define WIDTHOF(x) (sizeof(x) * CHAR_BIT)
#define SIZEOF_ARRAY(a) (sizeof(a) + must_be_array(a))
#define NITEMS(a) (SIZEOF_ARRAY((a)) / sizeof((a)[0]))
#define STRLEN(s) (NITEMS(s) - 1)
#endif // include guard