Cython:啥类似于 C 包含守卫?
Posted
技术标签:
【中文标题】Cython:啥类似于 C 包含守卫?【英文标题】:Cython: What is similar to C include guard?Cython:什么类似于 C 包含守卫? 【发布时间】:2022-01-22 19:18:18 【问题描述】:我有一堆 Cython 文件,它们以复杂的依赖顺序导入其他文件。问题是,有些 cimport 在编译时会出现这个错误:'Blahblah' redeclarared
这个问题在 C 中用包含保护的非常简单的方法解决了:
#ifndef XXX_HH
#define XXX_HH
...
#endif
我在 Cython 中找不到这样的包含保护类似功能,一般来说有什么解决方法吗? (非临时)
【问题讨论】:
你试过compile-time constants吗? 它说'Cython 中没有直接等效的 C #ifdef/#ifndef' 但是对于第二个 cimport,DEF 还是一样的 minimal reproducible example。没有等同于包括警卫。如果您想要一个有用的答案,您可能需要展示一个您实际尝试解决的简单示例 在 C 中,对于他们狡猾的文本包含模型来说,这可以说是一个糟糕的解决方法。所以我不相信 Cython 应该尝试用 1970 年代的 C 方式解决问题。 【参考方案1】:不是真正的#ifndef-similar 答案,只是为了分享这个问题,这很奇怪。问题是由于 cimport-ing 类本身的前向声明。
文件 1 common.pxd
cdef public struct myclass
cdef public cppclass output1:
myclass* value
cdef public cppclass output2:
float value
# Many more definitions...
文件 2 myclass.pxd
# Due to common.pxd has so many definitions,
# this asterisk was used to cimport
# ERROR! IT INCLUDES THE FORWARD DECLARATION OF myclass
from common cimport *
# OK HERE: INCLUDE 1 BY 1
from common cimport output1,output2,...
cdef public cppclass myclass:
pass
【讨论】:
以上是关于Cython:啥类似于 C 包含守卫?的主要内容,如果未能解决你的问题,请参考以下文章