使用 C 预处理器宏(仅常量)作为 Python 变量

Use C preprocessor macros (just the constants) as Python variables

我正在编写一个 Python 代码,它需要与我也编写的 C 代码进行互操作。在 C 中,我有一个像

这样的部分
#define FOO 23    // whatever
#define BAR 54.3  // something else

我想在 python 中使用它们(因为常规变量很好)。我在我的网络搜索中没有找到任何东西,我可以轻松地自己编写一个解析器,但是......我不敢相信我是第一个有这种需求的人。 PyPreprocessor 接近,但不完全是。

有没有我缺少的明显方法?

也许这有点矫枉过正,但您可以使用 dissect.cstruct 模块中的解析器。

它目前支持简单的预处理器定义和像 #define TWO (ONE+1) 这样的简单表达式,但是 不支持 #if#ifdef.

等条件

代码示例

from dissect.cstruct import cstruct    

defs_str = """
#define FOO 23    // whatever
#define BAR 54.3  // something else
"""

c = cstruct()
c.load(defs_str)
print(c.consts)  # => {'FOO': 23, 'BAR': 54.3}
print(c.FOO)     # => 23
print(c.BAR)     # => 54.3