* KHPC ver.0.01の内部資料的なもの -(by [[K]], 2016.05.19) ** 基本仕様 -KHPCの2番目のバージョン。KHPCは[[persistent-C>persistent_C]]の簡易実装を目指したツール群。 -基本方針: とにかくできるだけ手抜きをする。次のバージョンでまともにすればいい。手抜きは美徳である。 -このバージョンの目玉:「persistent命令」をサポートする。 ** ダウンロード -開発中 -http://khfdpl.osask.jp/download/khpc001a.zip --ソースはTab=4を想定。 ** サンプルコード #include <stdio.h> #include <khpc0.h> persistent int i = 0, sum = 0; persistent char str[16] = "hello, world"; int main() { persistent_load(0); for (; i <= 100; i++) { persistent_save(0); sum += i; } printf("sum=%d\n", sum); return 0; } ** ビルド方法 -(1) prompt>mksrc test.c > pd-test.c を実行する。 --すると pd-test.c というファイルが生成される。 -(2) prompt>mksrc :PDEF test.c > pdef.c を実行する。 --すると pdef.c が生成される。 -(3) prompt>gcc -o test.exe -O3 -I. pd-test.c pdef.c khpc0.c とする。 --これで出来上がり。 --gccでtest.cを指定する必要はないです。test.cの内容はpd-test.cにすべて反映されています。 --khpc0.cはライブラリです。 -(4) なんでこんなややこしい仕様なのかというと、分割コンパイルにも対応できるようにするためです。もし、ファイルが、prog0.c prog1.c prog2.cの3つに分割されていたら、以下のようにします。 prompt>mksrc prog0.c > pd-prog0.c prompt>mksrc prog1.c > pd-prog1.c prompt>mksrc prog2.c > pd-prog2.c prompt>mksrc :PDEF prog0.c prog1.c prog2.c > pdef.c prompt>gcc -o prog.exe -O3 -I. pd-prog0.c pd-prog1.c pd-prog2.c pdef.c khpc0.c --説明の都合上、プロンプトから入力するかのように書いていますが、実際はバッチファイルかMakefileにするのがよいでしょう。 ~ -pd-test.cの実体はこんな感じです。なーんだ、と言いたくなる内容かもしれません。 #define persistent #include "test.c" void persistent_def(void *p, int size, int grpId, const char *id); void persistent_default_test_c() { persistent_def(&i, sizeof(i), 0, "i"); persistent_def(&sum, sizeof(sum), 0, "sum"); persistent_def( str, sizeof(str), 0, "str"); } -pdef.cの実体はこんな感じです。 void persistent_grp(int grpId, const char *path, const char *tmp, const char *memo); void persistent_default_test_c(); void persistent_default() { persistent_grp(0, "p-vars.pbd", "p-vars.pb_", "(local)"); persistent_default_test_c(); return; } -この persistent_default() は persistent_load(0); のタイミングで自動的に呼び出されます。 ** 関数群 -[[KHPC_v000doc01]]に準ずる。 ** メモなど * こめんと欄 #comment