* KHPC ver.0.01の内部資料的なもの
-(by [[K]], 2016.05.19)

** 基本仕様
-KHPCの2番目のバージョン。KHPCは[[persistent-C>persistent_C]]の簡易実装を目指したツール群。
-基本方針: とにかくできるだけ手抜きをする。次のバージョンでまともにすればいい。手抜きは美徳である。

-このバージョンの目玉:「persistent命令」をサポートする。

** ダウンロード
-開発中

** サンプルコード
 #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


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS