【发布时间】:2015-09-03 09:50:41
【问题描述】:
在 C 语言中,如何在编译时检查 const 数组是否已排序(按升序)。
给定一个这样的数组: const int a[] = {4,5,6,8};
如果上面的数组没有排序,编译应该会失败。
这可能吗?
【问题讨论】:
-
你不能用 C 编译器检查它。您需要使用单独的工具。
-
条件预处理器可以提供帮助
-
@Dayalrai :请您详细说明一下。或者帮助为此编写代码。
-
您可以定义 MACRO 来检查数组是否已排序。在失败的情况下使用
#if ..#error ..#endif块 -
确保内容正确的一种有趣且有趣的方法是生成此类内容。例如。使用 f#:
let sb = new System.StringBuilder() in sb.Write("static const int a["); let a = [4..8] in sb.Write(a.Length.ToString()); sb.WriteLine("] = {"); a |> List.iter (fun v -> sb.Write(sprintf "%d, " v)); sb.WriteLine("};"); System.IO.File.WriteAllText(@"E:\temp\myarray.txt", sb.ToString())
标签: c compilation