このサンプルでは、S式を評価した内容を受け取ることはできていない。
単に”S式を評価させる”ということだけできているもの。
サンプルソースでは、
(print (+ 1 1))
というS式をGaucheのライブラリで評価させている。
その結果、標準出力に所望の'2'という結果が表示された。
sample.c
#include <gauche.h> int main(int argc, char **argv) { //GC_INIT(); Scm_Init(GAUCHE_SIGNATURE); //Scm_EvalCString("(print (+ 1 1))", SCM_OBJ(Scm_UserModule())); Scm_EvalCString("(print (+ 1 1))", SCM_NIL); //このサンプルでは、これで十分 Scm_Exit(0); return 0; }
see below
C言語からGaucheのライブラリを使う、はじめの一歩 on Dream Linux(Debian)
コンパイル
> gcc sample.c -I/usr/local/lib/gauche/0.8.14/include -lgauche
実行
> ./a.out 2
CGはとりあえず、初期化しなくても動いた。 (ほんとは初期化したほうが良いだろう)
今回のサンプルは、最大限のミニマムと思う。
ちなみに、動作は以下のコマンドと等価(いや、大体同じ)。
> gosh -E"(print (+ 1 1))" -eExit 2 >
Eval_CStringというGaucheのライブラリの関数は、 char*型で渡されたS式を内部で評価するもの。
その関数自体は、評価が成功すると0(以上)を戻り値として返す。
そして、いよいよ Gaucheの評価結果をchar*型で取ってくる(ScmEvalPacket)
gauche.hのpre-command処理部分
Gaucheユーザーリファレンス(3.1Gaucheを起動する/コマンドラインオプション)