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
This commit is contained in:
ISSOtm
2021-10-31 07:53:22 +01:00
parent b002d95459
commit 1a07391a97
2 changed files with 6 additions and 3 deletions

View File

@@ -89,4 +89,8 @@
#define STR(x) #x #define STR(x) #x
#define EXPAND_AND_STR(x) STR(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 */ #endif /* HELPERS_H */

View File

@@ -618,7 +618,7 @@ void lexer_Init(void)
*/ */
uint16_t usedNodes = 1; 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; uint16_t nodeID = 0;
/* Walk the dictionary, creating intermediate nodes for the keyword */ /* Walk the dictionary, creating intermediate nodes for the keyword */
@@ -645,8 +645,7 @@ void lexer_Init(void)
#ifdef PRINT_NODE_COUNT /* For the maintainer to check how many nodes are needed */ #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", printf("Lexer keyword dictionary: %zu keywords in %u nodes (pool size %zu)\n",
sizeof(keywords) / sizeof(*keywords), usedNodes, ARRAY_SIZE(keywords), usedNodes, ARRAY_SIZE(keywordDict));
sizeof(keywordDict) / sizeof(*keywordDict));
#endif #endif
} }