以前的程序员首选生成大型查找表(常量数组)以节省运行时CPU周期,而不是动态计算值。他通过创建自定义的Visual C ++项目来实现这一点,这些项目对于每个单独的查找表都是唯一的......它们生成数组文件,然后将#included包含在一个完全独立的ANSI-C微控制器(瑞萨)项目中。
这种方法适用于他原来的计算假设,但在需要修改输入参数时变得乏味,要求我重新编译所有Visual C ++项目并将这些文件重新导入ANSI-C项目。我想要做的是将Visual C ++源代码直接移植到ANSI-C微控制器项目中,让编译器创建数组表。
所以,我的问题是:ANSI-C编译器可以在编译期间计算和生成查找数组吗?如果是这样,我应该怎么做呢?
提前感谢您的帮助!
答案 0 :(得分:4)
是否有某些原因导致您无法将代码生成体系结构导入构建系统?
我的意思是,在make中我可能会考虑这样的事情:
TABLES:=$(wildcard table_*)
TABLE_INCS:=$(foreach dir,$TABLES,$dir/$dir.h)
include $(foreach dir,$TABLES,dir/makefile.inc)
$MAIN: $(SRS) $(TABLE_INCS)
其中每个table_*
包含一个完整的代码生成项目,其唯一目的是构建table_n/table_n.h
。在每个表目录中还有一个名为makefile.inc
的makefile片段,它为生成的包含文件提供依赖行,现在我已经删除了递归函数。
完成正确(并且此实现尚未完成,部分原因是这一点更清楚,但主要是因为我很懒),您可以编辑table_3/table_3.input
,在主目录中键入make
并重建table_3 / table_3.h并逐步重新编译程序。
答案 1 :(得分:1)
我想这取决于您需要查找的值的类型。如果计算每个值的处理要求超过例如持续表达评估可以提供,你将遇到问题。
答案 2 :(得分:0)
查看Boost预处理器库。它是为C ++编写的,但据我所知,这两个预处理器几乎完全相同,它可以做到这一点。