1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
cdef extern from "struct_field_adaptation.h":
"""
#define HAS_NEWLY_ADDED_FIELD (C_LIB_VERSION >= 20)
#if HAS_NEWLY_ADDED_FIELD
#define _mylib_get_newly_added_field(a_struct_ptr) ((a_struct_ptr)->newly_added_field)
#define _mylib_set_newly_added_field(a_struct_ptr, value) ((a_struct_ptr)->newly_added_field) = (value)
#else
#define _mylib_get_newly_added_field(a_struct_ptr) (0)
#define _mylib_set_newly_added_field(a_struct_ptr, value) ((void) (value))
#endif
"""
# Normal declarations provided by the C header file:
ctypedef struct StructType:
int field1
int field2
StructType *get_struct_ptr()
# Special declarations conditionally provided above:
bint HAS_NEWLY_ADDED_FIELD
int get_newly_added_field "_mylib_get_newly_added_field" (StructType *struct_ptr)
void set_newly_added_field "_mylib_set_newly_added_field" (StructType *struct_ptr, int value)
cdef StructType *some_struct_ptr = get_struct_ptr()
print(some_struct_ptr.field1)
if HAS_NEWLY_ADDED_FIELD:
print(get_newly_added_field(some_struct_ptr))
|