小编geo*_*org的帖子

void*array =*(void**)member + siz*(*p_n)的目的是什么?

我正在尝试使用C90编译器(MS VS2012)编译protobuf-c示例.

在protobuf-c源代码中,有两个C99特定的东西可以很容易地改变为与C90兼容,即在范围中间的变量声明(C90中不允许)和通过-syntax 实例化结构.(例如some_struct_type name = {.a=1,.b=2}) .

我现在卡住了一个编译错误.源文件'protobuf-cc'中的相应行读取:

void *array = *(void **) member + siz * (*p_n);
Run Code Online (Sandbox Code Playgroud)

哪里member是定义为void *p_n作为size_t *.各自的错误是

error C2036: 'void *' : unknown size
Run Code Online (Sandbox Code Playgroud)

请注意,这对protobuf-c版本1.0.1有效(请参阅相应的源代码,第2404行).此行已在版本1.0.2中更改为

void *array = *(char **) member + siz * (*p_n);
Run Code Online (Sandbox Code Playgroud)

这个评论.因此更改行会消除编译错误.

我的问题是:

  • 我想了解这行代码.
  • 我可以切换到*(char **)版本吗?
  • 告诉我的错误信息是什么?

(出于其他原因,我想坚持使用protobuf-c 1.0.1)

c c99 protocol-buffers c89

6
推荐指数
1
解决办法
185
查看次数

标签 统计

c ×1

c89 ×1

c99 ×1

protocol-buffers ×1