Embarcadero C++Builder迁移Jansson版本触发E2063非法初始化错误求助
解决Jansson 2.14在Embarcadero C++Builder中dump.c的E2063初始化错误
问题原因
报错的根源是BCC32编译器不支持C99标准的聚合初始化语法。Jansson 2.14版本的代码使用了C99允许的结构体直接聚合初始化方式struct buffer buf = {size, 0, buffer};,而旧版BCC32仅兼容C89标准,这种写法在C89中属于非法初始化。
解决方法
方法1:修改初始化代码为逐成员赋值
直接替换报错的初始化代码,改成C89兼容的逐成员赋值写法,适配所有版本的BCC32:
size_t json_dumpb(const json_t *json, char *buffer, size_t size, size_t flags) { struct buffer buf; buf.size = size; buf.used = 0; buf.data = buffer; // 需对应struct buffer的成员变量名,确保匹配 if (json_dump_callback(json, dump_to_buffer, (void *)&buf, flags)) return 0; return buf.used; }
方法2:启用C99编译模式(适用于较新C++Builder版本)
如果你的C++Builder版本为10.4或更高,可以通过开启C99支持解决:
- 打开项目选项(Project Options)
- 导航到
C++ Compiler -> Language - 将
C Language Standard设置为ISO C99 - 重新编译项目
方法3:重新编译Jansson库(可选)
若自行编译Jansson库,可在配置时添加兼容旧编译器的选项,执行configure脚本时输入:
./configure --enable-c89
注:需确认Jansson是否提供该配置选项,若没有则优先使用前两种方法。
内容的提问来源于stack exchange,提问作者Aravind
相关产品推荐
相关产品推荐

