64,636
社区成员
发帖
与我相关
我的任务
分享
typedef struct _A
{
UINT8 length;
UINT8 data[];
}A;
typedef struct _A {
UINT8 length;
UINT8* data;
}A;
//python源码asdl.h
typedef struct {
int size;
void *elements[1];
} asdl_seq; // Abstract Syntax Definition Language
//http://docs.python.org/devguide/compiler.html
//http://www.cs.princeton.edu/research/techreps/TR-554-97
在c语言中这样定义,空数组不占用任何空间,它只有偏移值,这样的方法是为了保留缓冲区和数据动态增长。
在C++中struct是特殊的class,编译器为其自动生成默认构造函数及拷贝构造函数,拷贝构造的过程中由于data本质是空的(在预编译的时候编译器根据data此可得偏移值,而在默认拷贝的过程中要拷贝该偏移值处的数据,而此处是空的,于是报错),c不会在预编译的时候考虑未预留的空间的值。
http://bbs.csdn.net/topics/120033131
typedef struct _A
{
UINT8 length;
UINT8 data[ANYSIZE_ARRAY];
}A;