【发布时间】:2014-10-21 13:24:55
【问题描述】:
我定义了一些宏,例如
#define NUM_A 3
#define A1 10
#define A2 100
#define A3 8
总计数和值特定于设备。 现在我需要一个数组看起来像
int Array[NUM_A]={A1, A2, A3};
现在,如果总数,NUM_A 变为 4,并且我已经定义了宏 A4,但我忘记将 A4 附加到数组中。实际的数组是 {A1, A2, A3, 0}。编译时不会出错。运行程序时也很难发现错误。当我在头文件中编写宏并在源文件中声明数组时,更有可能发生这种情况。 我可以编写一个循环宏来通过定义的宏 NUM_A、A1、A2 和 A3 生成数组吗?或者如果编译或运行时出现错误,我可以写一个断言或其他东西来警告自己吗?
【问题讨论】:
-
Boost 有工具可以做到这一点。我想它们是 C 兼容的……我的意思是,它们一定是,对吧?无论如何,总而言之,你必须编写可怕的宏魔法......但它是可能的。
-
@LightnessRacesinOrbit Boost 适用于 C++,为什么“必须”它与 C 兼容?我随机查看的任何 Boost 代码一直都在模板中。
-
简单地省略声明中的元素数量怎么样,如stackoverflow.com/questions/9846920/define-array-in-c
-
@Codor 无助于检测 OP 忘记更新值列表以匹配预期元素数量的情况。