3

以前的程序员更喜欢生成大型查找表(常量数组)以节省运行时 CPU 周期,而不是即时计算值。他通过创建自定义 Visual C++ 项目来做到这一点,这些项目对于每个单独的查找表都是唯一的...生成数组文件,然后 #included 到一个完全独立的 ANSI-C 微控制器 (Renesas) 项目中。

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

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

在此先感谢您的帮助!

4

3 回答 3

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 片段makefile.inc,它为生成的包含文件提供依赖行,现在我已经删除了递归性。

做对了(这个实现还没有完成,部分原因是这样更清楚,但主要是因为我很懒),你可以编辑table_3/table_3.inputmake在主目录中键入并重新构建 table_3/table_3.h 并逐步重新编译程序.

于 2010-03-18T17:29:24.547 回答
1

我想这取决于您需要查找的值的类型。如果计算每个值的处理需要的比常量表达式求值所能提供的更多,那么你就会遇到问题。

于 2010-03-18T17:12:12.997 回答
0

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

于 2010-06-19T20:18:30.083 回答