【发布时间】:2018-04-25 10:03:46
【问题描述】:
我有这个 const 函数指针数组:
const callback_t callbacks[] =
{
func1,
func2,
func3,
func4,
func5
};
我想添加 C 编译时断言以确保 func1 放在数组中的第一个位置。 类似的东西:
C_ASSERT(callbacks[0] == func1);
在 pre-preocessor 阶段之后,这被扩展为:
extern char __C_ASSERT__272[( callbacks[0] == func1)?1:-1] __attribute__((unused))
但我收到编译错误:
error: variably modified '__C_ASSERT__272' at file scope
【问题讨论】:
-
那么是
C_ASSERT是什么?标准 C 中没有这样的宏(我认为是的)。 -
为什么你需要一个断言?您已经声明了数组
const,所以除了func1之外什么都不会出现在那个位置上。如果您担心有人会不兼容地更改代码,那么这就是您的单元测试的工作(并且好的 cmets 可以解释 为什么callbacks[0]必须是func1)。 -
我已将 C_ASSERT 的扩展添加到问题中。我需要它以防止(由其他人)错误地更改。问题中的示例自然比真实代码要最小化。
-
我正在投票重新开放。选择的副本不准确:
_Static_assert也不会编译。
标签: c constants function-pointers assert