ref: 1a07391a97504672588516becc0c02de4702fd11
parent: b002d95459ec9dbd439db8090694abdb885ad4a2
author: ISSOtm <[email protected]>
date: Sun Oct 31 03:53:22 EDT 2021
Introduce `ARRAY_SIZE` macro Checked by `checkpatch`, and you know what? Not a bad thing See https://github.com/gbdev/rgbds/pull/931#discussion_r738856724
--- a/include/helpers.h
+++ b/include/helpers.h
@@ -89,4 +89,8 @@
#define STR(x) #x
#define EXPAND_AND_STR(x) STR(x)
+// Obtaining the size of an array; `arr` must be an expression, not a type!
+// (Having two instances of `arr` is OK because the contents of `sizeof` are not evaluated.)
+#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof *(arr))
+
#endif /* HELPERS_H */
--- a/src/asm/lexer.c
+++ b/src/asm/lexer.c
@@ -618,7 +618,7 @@
*/
uint16_t usedNodes = 1;
- for (size_t i = 0; i < sizeof(keywords) / sizeof(*keywords); i++) {
+ for (size_t i = 0; i < ARRAY_SIZE(keywords); i++) {
uint16_t nodeID = 0;
/* Walk the dictionary, creating intermediate nodes for the keyword */
@@ -645,8 +645,7 @@
#ifdef PRINT_NODE_COUNT /* For the maintainer to check how many nodes are needed */
printf("Lexer keyword dictionary: %zu keywords in %u nodes (pool size %zu)\n",
- sizeof(keywords) / sizeof(*keywords), usedNodes,
- sizeof(keywordDict) / sizeof(*keywordDict));
+ ARRAY_SIZE(keywords), usedNodes, ARRAY_SIZE(keywordDict));
#endif
}