我有这个函数指针常量数组:
const callback_t callbacks[] =
{
func1,
func2,
func3,
func4,
func5
};
我想添加 C 编译时断言以确保 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
最佳答案
你不能。变量值(在本例中是callbacks[0]
)不能在 C 中的常量表达式中使用。即使变量被声明为 const
,也不能使用。
您必须执行运行时断言或检查,或者在数组定义旁边添加大注释,说明 /* func1 必须是第一个! */
.
关于对函数指针 const 数组进行 C 编译时断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50019431/