我是计划/诡计的新手。我想使用用户的 scm 脚本过滤 C 程序内的 C 结构数组。像这样的东西:
struct Date {
int year;
int month;
int day;
};
struct Person {
char name[20];
Date birth;
Date death;
};
void printPersons(Person* persons, size_t n_persons, const char* scm_file) {
size_t i;
/* (...) compile script */
for(i=0; i< n_persons;++i)
{
int accept = /** call guile script with &persons[i] */
if( accept) printf("%s\n",persons[i].name);
}
/* dispose script */
}
现在我迷失在手册中了。我应该从哪里开始?谢谢。
最佳答案
要在 C 程序中调用方案脚本以使用 guile 进行评估,您需要使用 scm_with_guile()。然后,由 scm_with_guile() 执行的函数需要调用 scm_c_eval_string() (以方案语法计算字符串)或 scm_c_primitive_load() (以方案语法计算文件)之类的函数。这些字符串和文件本身可以使用正常的方案语法调用 guile load 和 use-modules 过程。
如果您碰巧使用 C++,这可能会给您一些想法:c++-gtk-utils/extension和 extension source code 。对于您的特定代码,您可以使用使用 Cgu::Extension::integer_to_long() 转换器调用的 Cgu::Extension::exec_shared() 的返回值来初始化“accept”变量,但由于“accept”是int 类型,在 64 位系统上,您需要允许 long 到 int 溢出。您还需要将 person 结构解构为脚本的单独值。
关于c - 使用 GNU guile 过滤 C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34725194/