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



在C语言中,如何在编译时检查const数组是否排序(按升序排列)

给定如下数组:Const int a[] = {4,5,6,8};

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

这可能吗?

这在编译时是非常困难的,使用标准工具(预处理器等)甚至可能是不可能的。

也许一个更好的解决方案是,在数组创建后尽快,简单地让代码检查它(你也可以禁用像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 arraysn", __FILE__, __LINE__);
        exit(1);
    }
}
#endif

最新更新