我需要将我的C ++代码翻译成C99:
struct TransferData {
int data[256];
} *readData;
readData = (TransferData *) malloc(sizeof(struct TransferData));
我几乎尝试了所有方法,但每次都会遇到编译错误。 有人可以帮忙吗?
答案 0 :(得分:4)
对于C
,您需要转为struct TransferData *
,而不是TransferData *
。你没有一个名为TransferData *
的类型(或完全抛弃演员阵容,但这是另一场圣战,毫无意义的恕我直言)。
答案 1 :(得分:2)
您既可以像@icepack那样说,也可以像这样更改结构定义:
typedef struct {
int data[256];
} TransferData;
TransferData *readData;
readData = malloc(sizeof(TransferData));
修改:请注意,最好将sizeof
与变量而不是类型一起使用,以避免重复:
readData = malloc(sizeof(*readData));
但使用此样式时请注意不要意外传递指针的大小。
如果没有typedef
,您需要在C中编写struct StructType
,这在C ++中并不需要。如评论中所述,在C中不需要转换malloc
的结果,只会使代码混乱。在C ++中这是必要的,但你不应该在那里使用malloc
。
答案 2 :(得分:1)
如果您使用C
,则不应转换malloc
的结果。重复类型信息是一种糟糕的风格。此外,结构的类型为struct TransferData
,而不是TransferData
中的C++
。我建议
readData = malloc(sizeof(*readData));