检查const数组是否在编译期间排序(C语言)

时间:2015-09-03 09:50:42

标签: c compilation

在C语言中,如果const数组按顺序排序(按升序排序),如何在编译期间检查。

给定一个这样的数组: const int a [] = {4,5,6,8};

如果上面的数组没有排序,编译将失败并显示错误。

这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

这在编译时很难完成非常,使用标准工具(预处理器等)甚至可能无法实现。

也许更好的解决方案是在数组创建后尽快让代码检查它(你也可以像assert一样禁用):

const int a[] = { 4, 5, 6, 8 };
#ifndef NDEBUG
for (int i = 1; i < sizeof(a) / sizeof(a[0]); i++) {
    if (a[i-1] > a[i]) {
        fprintf (stderr, "%s(%d) Check your arrays\n", __FILE__, __LINE__);
        exit(1);
    }
}
#endif