我有以下代码:
#define SUB_LIST 1, 2, 3
uint8_t sub_array[] = {SUB_LIST};
#define SUB_LIST_SIZE (sizeof(sub_array) / sizeof(sub_array[0]))
uint8_t array[SUB_LIST_SIZE + X] = {0};在这里,sub_array[]之所以存在,只是因为我需要它来获取SUB_LIST中的元素数。它不在其他地方使用,因此是对记忆的极大浪费。
可以获得SUB_LIST中的元素数,而不必为sub_array[]永久分配内存。
发布于 2022-08-19 14:08:49
考虑这样的宏:
#define GET_SIZE(...) ( sizeof (uint8_t[]){ __VA_ARGS__} )用法:
GET_SIZE(SUB_LIST)这将创建一个临时复合文字数组,并将项目列表作为初始化项列表放置到该数组中。在任何情况下,复合文字几乎肯定会被优化--在您的例子中,它将被机器代码中的数字3所取代。
https://stackoverflow.com/questions/73417499
复制相似问题