在编译时构建静态数组
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 源代码共享代码。
我有几个大型静态数组,用于资源受限的嵌入式系统(小型微控制器、裸机)。在项目过程中偶尔会添加这些,但都遵循相同的人口数学公式。我可以只制作一个 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 源代码共享代码。