在编译时构建静态数组

Building a static array at compile time

我有几个大型静态数组,用于资源受限的嵌入式系统(小型微控制器、裸机)。在项目过程中偶尔会添加这些,但都遵循相同的人口数学公式。我可以只制作一个 Python 脚本来在编译之前用所需的数组生成一个新的 header,但最好让它在 pre-processor 中发生,就像你可能对模板 meta-programming 在 C++ 中。在 C 中有没有相对简单的方法来做到这一点?我已经看到了使用 pre-processor 来获得像 while 循环这样的控制结构的方法,但这对我来说似乎有点不自然。

这里有一个这样的映射的例子,在Python中近似于arctan,其中参数a用于确定数组的长度和值,目前 运行 的各种值从大约 100 到大约 2^14:

def make_array(a):
    output = []
    for x in range(a):
        val = round(a * ((x / a)**2 / (2 * (x / a)**2 - 2 * (x / a) + 1)))
        output.append(val)
    return output

Is there any relatively easy way to do this in C?

没有

坚持使用 Python 脚本并将其合并到您的构建系统中。使用其他脚本生成C代码是正常的。这比一百万行 C 代码要容易得多。

看看 M4 或 Jinja2(或 PHP)——这些宏处理器允许在同一文件中与 C 源代码共享代码。