【问题标题】:Filtering C structures with GNU guile使用 GNU guile 过滤 C 结构
【发布时间】:2016-01-11 15:28:37
【问题描述】:

我是scheme/诡计的新手。我想使用用户的 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 scheme guile


    【解决方案1】:

    要在 C 程序中调用方案脚本以使用 guile 进行评估,您需要使用 scm_with_guile()。然后,由 scm_with_guile() 执行的函数需要调用类似 scm_c_eval_string() (以方案语法评估字符串)或 scm_c_primitive_load() (以方案语法评估文件)之类的东西。这样的字符串和文件本身可以使用普通的方案语法调用 guile load 和 use-modules 过程。

    如果你碰巧在使用 C++,这可能会给你一些想法:c++-gtk-utils/extensionextension source code。关于您的特定代码,您可以使用 Cgu::Extension::exec_shared() 的返回值初始化您的“接受”变量,该返回值使用 Cgu::Extension::integer_to_long() 翻译器调用,但由于“接受”是int 类型,在 64 位系统上,您需要允许 long to int 溢出。您还需要将您的 person 结构解构为脚本的各个值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-28
      • 2021-11-12
      • 2022-01-27
      • 2015-06-29
      • 1970-01-01
      • 2015-09-25
      • 2018-08-04
      • 1970-01-01
      相关资源
      最近更新 更多