C Compile-Time在const数组函数指针上断言

时间:2018-04-25 10:03:47

标签: c const function-pointers assert

我有这个const数组的函数指针:

const callback_t callbacks[] =
{
    func1,
    func2,
    func3,
    func4,
    func5
};

我想添加C Compile-Time断言以确保func1首先放在数组中。 这样的事情:

C_ASSERT(callbacks[0] == func1);
在处理前阶段之后,这将扩展到:

extern char __C_ASSERT__272[( callbacks[0] == func1)?1:-1] __attribute__((unused))

但我收到了编译错误:

error: variably modified '__C_ASSERT__272' at file scope

1 个答案:

答案 0 :(得分:0)

你不能。变量值(在这种情况下为callbacks[0])不能在C中的常量表达式中使用。即使变量声明为const,也不会使用。

您必须执行运行时断言或检查,或在数组定义旁边添加大注释/* func1 must be first! */