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

时间:2019-05-02 06:30:33

标签: c

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

"match_parent"

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

1 个答案:

答案 0 :(得分:6)

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

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

相关问题