以前的程序员更喜欢生成大型查找表(常量数组)来节省运行时CPU周期,而不是动态计算值。他通过创建定制的Visual C++项目来做到这一点,这些项目对于每个单独的查找表都是唯一的……它生成数组文件,然后将其包含在一个完全独立的ANSI-C微控制器(Renesas)项目中。
这种方法对于他最初的计算假设来说很好,但是当需要修改输入参数时就变得单调乏味了,需要我重新编译所有的可视C++项目,并将这些文件重新导入到ANSI-C项目中。我想要做的是将Visual ANSI源代码直接移植到C++ -C微控制器项目中,并让编译器创建数组表格。
所以,我的问题是: ANSI-C编译器可以在编译时计算和生成查找数组吗?如果是这样的话,我应该怎么做呢?
提前感谢您的帮助!
发布于 2010-03-19 01:29:25
有什么原因你不能将他的代码生成架构导入到你的构建系统中吗?
我的意思是,在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,并以增量方式重新编译程序。
发布于 2010-03-19 01:12:13
我猜这取决于您需要查找的值的类型。如果计算每个值所需的处理超出了常量表达式计算所能提供的范围,那么您就会遇到问题。
发布于 2010-06-20 04:18:30
查看Boost预处理器库。它是为C++编写的,但据我所知,这两个预处理器几乎完全相同,它可以做这类事情。
https://stackoverflow.com/questions/2471880
复制相似问题