3

以前のプログラマーは、値をその場で計算するのではなく、実行時のCPUサイクルを節約するために、大きなルックアップテーブル(定数の配列)を生成することを好みました。彼は、個々のルックアップテーブルごとに一意のカスタムVisual C ++プロジェクトを作成することでこれを行いました。これにより、配列ファイルが生成され、完全に別個のANSI-Cマイクロコントローラー(ルネサス)プロジェクトに#includeされます。

このアプローチは、彼の元の計算の仮定には問題ありませんが、入力パラメーターを変更する必要がある場合は面倒になり、すべてのVisual C ++プロジェクトを再コンパイルし、それらのファイルをANSI-Cプロジェクトに再インポートする必要があります。私がやりたいのは、Visual C ++ソースをANSI-Cマイクロコントローラープロジェクトに直接移植し、コンパイラーに配列テーブルを作成させることです。

だから、私の質問は:ANSI-Cコンパイラはコンパイル時にルックアップ配列を計算して生成できますか?もしそうなら、私はそれについてどうすればいいですか?

よろしくお願いします!

4

3 に答える 3

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フラグメントがmakefile.incあり、再帰性を削除しました。

正しく完了しました(この方法でポイントが明確になったため、この実装は完了していませんが、ほとんどの場合、私は怠惰です)、編集してメインディレクトリtable_3/table_3.inputに入力makeし、table_3 / table_3.hを再構築して、プログラムを段階的に再コンパイルできます。

于 2010-03-18T17:29:24.547 に答える
1

それはあなたが調べる必要のある価値の種類に依存すると思います。各値を計算する処理が、たとえば定数式の評価が提供できる以上のものを要求する場合、問題が発生します。

于 2010-03-18T17:12:12.997 に答える
0

Boostプリプロセッサライブラリをチェックしてください。これはC++用に書かれていますが、私が知る限り、2つのプリプロセッサーはほとんど同じであり、この種のことを実行できます。

于 2010-06-19T20:18:30.083 に答える