至少对于GCC
enum来说,只是一个简单的数字类型。它可以是8位,16位,32位,64位或其他任何值(我已经用64位值对其进行了测试)以及
signed或
unsigned。我猜它不能超过
longlong int,但是实际上你应该检查你的范围
enum并选择类似
c_uint。
这是一个例子。C程序:
enum batch_op { OP1 = 2, OP2 = 3, OP3 = -1,};struct attrl { char *name; struct attrl *next; enum batch_op op;};void f(struct attrl *x) { x->op = OP3;}和Python之一:
from ctypes import (Structure, c_char_p, c_uint, c_int, POINTER, CDLL)class AttrList(Structure): passAttrList._fields_ = [ ('name', c_char_p), ('next', POINTER(AttrList)), ('op', c_int),](OP1, OP2, OP3) = (2, 3, -1)enum = CDLL('./libenum.so')enum.f.argtypes = [POINTER(AttrList)]enum.f.restype = Nonea = AttrList(name=None, next=None, op=OP2)assert a.op == OP2enum.f(a)assert a.op == OP3


