gpt4 book ai didi

c - 如何在 C 中找到初始化程序的大小?

转载 作者:行者123 更新时间:2023-12-02 08:02:08 25 4
gpt4 key购买 nike

我正在尝试定义一个列表,其中包含我们设备的 MAC 地址。我想用宏来做。这是我定义的列表示例:

#define WHITELIST_DEVICE {                                  \
{0x45,0x11,0xDF,0xED,0x2B,0x61}, \
{0xAB,0x11,0xDF,0x61,0x6B,0x2B}, \
{0x61,0x6B,0x3B,0xED,0x61,0x61}, \
{0xDF,0x55,0xDF,0x6B,0x6B,0x61}, \
} /**< List of device mac addresses in whitelist*/

定义列表后,我想收集它的大小,如列和行。最简单的方法是什么?您还可以向我建议一种定义列表的新方法。该代码将在嵌入式系统上运行。所以,它不应该有繁重的算法 :)

最佳答案

假设总是有六列,您可以通过在复合文字中使用上述初始值设定项来进行计算。

#define WHITELIST_DEVICE_LENGTH ( sizeof ((int[][6])WHITELIST_DEVICE) / sizeof ((int[][6])WHITELIST_DEVICE[0]) ) 

#define WHITELIST_DEVICE_LENGTH ( sizeof ((int[][6])WHITELIST_DEVICE) / sizeof (int[6]) /* a "row" */ ) 

(int[][6])WHITELIST_DEVICE - 通常会在它出现的范围内创建一个匿名对象。但是当文字是 sizeof 的操作数时(表达式变体)它不会创建任何对象,而只会在编译期间对相关类型进行计算。

获取数组大小的 sizeof 技巧我希望不需要解释。它还使得选择 int 作为数组元素无关紧要,因为该大小将在除法期间被抵消。我选择该类型是为了避免您的文字数字不适合数组元素的任何潜在问题。

关于c - 如何在 C 中找到初始化程序的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55946793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com