是否可以将C预处理器宏可靠地转换为python代码?

是否可以将C预处理器宏可靠地转换为python代码?,python,c-preprocessor,Python,C Preprocessor,我有一堆C宏,我需要用python模拟这些宏的操作。我看到一些指向pygccxml或ctypeslib等的指针。这些是方法吗?还是有更好的办法 C宏如果更改,我希望python实现自动生成,而不必手动修改。这就是问题所在 my_c_header.h: #ifdef OS #define NUM_FLAGS (uint16_t)(3) #define NUM_BITS (uint16_t)(8) #else #define NUM_FLAGS (uint16_t)(6) #de

我有一堆C宏,我需要用python模拟这些宏的操作。我看到一些指向pygccxml或ctypeslib等的指针。这些是方法吗?还是有更好的办法

C宏如果更改,我希望python实现自动生成,而不必手动修改。这就是问题所在

my_c_header.h

#ifdef OS

#define NUM_FLAGS   (uint16_t)(3)
#define NUM_BITS    (uint16_t)(8)

#else

#define NUM_FLAGS   (uint16_t)(6)
#define NUM_BITS    (uint16_t)(16)
#endif

#define MAKE_SUB_FLAGS    (uint16_t)((1<<NUMFLAGS) -1)

#define MAKE_TOTAL_FLAGS(x)  (uint16_t)((x & MAKE_SUB_FLAGS) >> NUM_BITS)

/* #defines type 2 */

#ifdef OS
#DO_SOMETHING(X)  os_specifc_process(x)
#else
#DO_SOMETHING(x)  
#endif

/* #defines type 3 */

enum
{
CASE0,
CASE1,
CASE2
}

#define MY_CASE_0     ((uint16_t)CASE0)
#define MY_CASE_1     ((uint16_t)CASE1)
#define MY_CASE_2     ((uint16_t)CASE2)


/*End of file <my_c_header.h> */
#ifdef OS
#定义NUM_标志(uint16_t)(3)
#定义数字位(uint16)(8)
#否则
#定义NUM_标志(uint16_t)(6)
#定义数字位(uint16)(16)
#恩迪夫
#定义MAKE_SUB_标志(uint16_t)((1个数字位)
/*#定义类型2*/
#IFOS
#做某事(X)操作特定的过程(X)
#否则
#做某事(x)
#恩迪夫
/*#定义类型3*/
枚举
{
案例0,
案例1,
案例2
}
#定义我的案例0((uint16)案例0)
#定义我的案例1((uint16)案例1)
#定义我的案例2((uint16)案例2)
/*文件结束*/

如果您正在编写扩展模块,请使用

这些宏有多复杂?C中的宏当然可以是任何东西(因为它们只是文本替换),但通常“正常”的宏可以非常简单,可能只是数学表达式,对函数的调用有限或没有调用。您的宏是什么样子的?(示例?)这也有助于了解更多您正在做的事情:这是用于自动测试还是类似的东西?我做了一个
parse_c.py
来测试一些68HC12代码(嵌入式CPU),这些代码可以处理您所显示内容的复杂性。在一定范围内,它可以处理枚举、结构(构建ctypes结构),并计算(使用Python eval)宏,如上图所示。这很粗糙,但取决于您的需要,它可能是您想要的(经过一些工作).Eli Bendersky可能是一个很好的起点:如果我重新开始,我会从那里开始。这将是一个简单的例子,使用“ctypes”或类似的Python代码使用预先存在的C库,除了需要使用发布在原始消息。有什么建议吗?这个问题已经在另一个线程中得到了回答。稍后code.google.com/p/pycparser在404 wind中