基本的に、Prolog からいくつかの C コードを呼び出したいと思います。コードは次のとおりです。
プロローグ:
:-foreign(fun1(+integer,-integer)).
:-foreign(fun2(+integer,-integer)).
% p = b;
testfuna(Var, Val) :- fun1(Val, Var).
% p = &b;
testfunb(Var, Val) :- fun2(Val, Var).
main :-
A is 1,
testfuna(A, P),
write(P),
testfunb(A, P),
write(P),
% print out
write(A), nl.
子:
#include <gprolog.h>
#include <string.h>
PlBool fun1(int ptr, int* res){
*res = ptr;
printf("%d\n", *res);
if(res==NULL){
return PL_FALSE;
}else{
return PL_TRUE;
}
}
PlBool fun2(int val, int* res){
*res = &val;
printf("%p\n", *res);
if(res==NULL){
return PL_FALSE;
}else{
return PL_TRUE;
}
}
これを使用してバイナリ形式にコンパイルします。
gplc -o sample sample.c sample.pl
問題は、このコードを実行した後の出力が次のようになることです。
1 <--- right
1 <--- match, right!
0xbff2160c <-- it is on the stack
-911860 <--- why?
4 番目の出力が新しいメモリ アドレスである理由がわかりません。私の理解では、それも0xbff2160cである必要があります。
私が間違っている?誰か助けてくれませんか?