在C语言中,如何在编译时检查一个常量数组是否按升序排序。
给定这样的数组:
常量整型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 arrays\n", __FILE__, __LINE__);
        exit(1);
    }
}
#endif

关于c - 检查const数组是否在编译期间排序(C语言),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32372355/

10-11 22:13
查看更多