对函数指针 const 数组进行 C 编译时断言

标签 c constants function-pointers assert

我有这个函数指针常量数组:

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/

相关文章:

c - 编写一个 “query-controlled” 循环,将继续从用户输入 int 值?

angular - 使用可注入(inject) token 处理全局常量 Angular 4

c++ - 有 make_const_iterator 吗?

javascript - 如何使用 const 关键字将 Javascript 常量创建为对象的属性?

c++ - 类模板中的静态函数指针成员

c - 如何将结构中的所有数据存储到新数组中?

c - ceil() 和 floor() 的实现

c - 重新编码 itoa : error on minimum int

c - 动态数组 C

c++ - 函数指针的使用