[Cython] new arrayarray.h header file not C99 compatible
Stefan Behnel
stefan_ml at behnel.de
Mon Aug 20 15:39:47 CEST 2012
Hi,
I'm getting test build failures with the new arrayarray.h header file when
I enable "--std=c89" or "c99" in the CFLAGS:
"""
memoryview_inplace_division.c:877: warning: declaration does not declare
anything
memoryview_inplace_division.c:893: warning: declaration does not declare
anything
memoryview_inplace_division.c: In function ‘newarrayobject’:
memoryview_inplace_division.c:929: error: ‘arrayobject’ has no member named
‘ob_item’
...
"""
The lines it warns about (and which trigger the subsequent errors) are the
following union declarations:
"""
typedef struct arrayobject {
PyObject_HEAD
union {
Py_ssize_t ob_size, length;
};
union {
char *ob_item;
float *_f;
double *_d;
int *_i;
unsigned *_I;
unsigned char *_B;
signed char *_b;
char *_c;
unsigned long *_L;
long *_l;
short *_h;
unsigned short *_H;
Py_UNICODE *_u;
void *_v;
};
...
"""
Apparently, anonymous unions only became part of the C standard in C11:
http://stackoverflow.com/questions/3228104/anonymous-union-within-struct-not-in-c99
That's unfortunate, but I think we'd best give the unions a name (and let
users change all code that uses them ...).
BTW, is there any reason we have a "length" field at all? Shouldn't we be
using Py_SIZE() ?
Stefan
More information about the cython-devel
mailing list