有没有办法包装一个像关键字一样命名的结构(例如 print )?

发布于 2024-12-27 04:48:08 字数 385 浏览 1 评论 0原文

我有一些 C 源代码,想将其包装在 Cython 中。现在的问题是,有一个名为 print 的结构,并且 externing 它会引发语法错误。

cdef extern from "foo.h":
    struct print:
        # ...

当像关键字一样调用属性或函数等时,也会出现同样的问题。

cdef extern from "foo.h":
    struct foo:
        bint print
    print(char*, int)

有没有办法解决这个问题,无需修改源代码?也许有某种技术可以用源文件中的真实姓名替换代理名称?

I have some C source code and want to wrap it in Cython. Now, the problem is, that there is a structure called print, and externing it throws a syntax error.

cdef extern from "foo.h":
    struct print:
        # ...

Same problem would appear when an attribute or a function or alike is called like a keyword.

cdef extern from "foo.h":
    struct foo:
        bint print
    print(char*, int)

Is there a way to work around this, without modifieng the source? Maybe some technique that replaces a proxy-name with the real-name in the source-file ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

归属感 2025-01-03 04:48:08

我认为您正在寻找的解决方案类似于:

cdef extern from "foo.h":
    struct print "MY_print":
        double var "MY_var"

print.var 将被定义为:

MY_print.MY_var

这样您就可以从头文件中重命名结构、函数、联合和枚举。当 Cython 将代码编译为 C 代码时,名称会被转换。

Cython 文档的相关部分可以找到 此处

I think the solution you are looking for is something along the lines of:

cdef extern from "foo.h":
    struct print "MY_print":
        double var "MY_var"

print.var will then be defined by:

MY_print.MY_var

This way you can rename structs, functions, unions and enums from the header file. The names are converted when Cython compiles your code into C code.

The relevant part of Cython documentation can be found here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文