2010-03-18 41 views
3

以前的程序员倾向于生成大型查找表(常量数组)以节省运行时CPU周期而不是实时计算值。他通过创建自定义的Visual C++项目来实现这一点,这些项目对于每个单独的查找表是独一无二的......这些项目生成阵列文件,然后#included到一个完全独立的ANSI-C微控制器(瑞萨)项目中。为ANSI-C编译时查找数组?

这种方法对于他的原始计算假设很好,但是当输入参数需要修改时变得单调乏味,需要我重新编译所有Visual C++项目并将这些文件重新导入到ANSI-C项目中。我想要做的是将Visual C++源代码直接移植到ANSI-C微控制器项目中,让编译器创建数组表。

所以,我的问题是:ANSI-C编译器可以在编译期间计算并生成查找数组吗?如果是这样,我应该怎么做呢?

在此先感谢您的帮助!

+1

难道你只是自动化这个过程,例如与生成脚本和/或嵌套的项目? – 2010-03-18 17:14:21

回答

4

有没有理由不能将他的代码生成架构导入到构建系统?

我的意思是,在化妆我可能会考虑这样的:

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重新编译和程序增量重新编译。

+0

这当然是我可以采取的一种方法。因此,根据您的经验,编译器本身无法生成计算的数组数据,因此我需要依靠外部脚本引擎或二进制文件来完成工作?任何预处理器指令/宏能够计算这样的表吗? – multiproximus 2010-03-19 13:41:35

+0

@multiproximus:有时候你可以对预处理器做些什么,但是如果我读了你的问题,你的继承代码会附带一个可用的代码生成方案,不是吗?这里的想法是利用这一点。所以我得到构建系统来处理代码生成,但是你没有说你正在使用什么来管理你的构建(手工完成,ide内置,make,scons等)。 – dmckee 2010-03-19 14:47:10

1

我想这取决于你需要查找的价值类型。如果计算每个值的处理需要比例如常量表达式评估可以提供,你会遇到问题。

0

查看Boost预处理器库。它是为C++编写的,但据我所知,这两个预处理器几乎完全相同,它可以做这种事情。