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

卡格拉扬·布拉克

我正在尝试定义一个列表,其中包括我们设备的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*/

定义列表后,我想像列和行一样收集其大小。最简单的方法是什么?您也可以建议我一种定义列表的新方法。该代码将在嵌入式系统上工作。因此,它不应该包含繁重的算法:)

讲故事的人-Unslander Monica

假设总有六列,则可以在复合文字中使用上述初始化程序进行计算。

#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数组元素变得无关紧要,因为在分割过程中该大小将被抵消。我选择了这种类型,以避免您的文字数字不适合数组元素的任何潜在问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章