Show V2EX: cmarshal: C struct JSON 序列化 / 反序列化代码生成器
資深大佬 : gyf304 1
只需要给你的 C struct 加如下的一行注释就可以用 cmarshal 自动生成 JSON 序列化 / 反序列化代码。
/* cmarshal:`true` */
可以不费吹灰之力实现在 C 语言中实现 JSON 配置文件的读取。
GitHub
觉得有意思的话帮忙加个星
大佬有話說 (6)
只需要给你的 C struct 加如下的一行注释就可以用 cmarshal 自动生成 JSON 序列化 / 反序列化代码。
/* cmarshal:`true` */
可以不费吹灰之力实现在 C 语言中实现 JSON 配置文件的读取。
GitHub
觉得有意思的话帮忙加个星
首先,__attribute__ 关键字是 gcc 独有的(虽然 clang 这种与 gcc 高度兼容的编译器也支持),所以从兼容角度来看并不好。再加上这是一个 clang plugin,那就更麻烦了。即使用的就是 clang,为了在 plugin 不存在的时候不报 warning (-Wunknown-attributes ),需要检测那个自定义 attribute 是否存在,而这不能简单地用一个 #ifdef 实现,而是需要依靠构建脚本(参考 AX_GCC_FUNC_ATTRIBUTE 的实现,是构造一段带有指定 attribute 的代码,然后尝试编译,看看有没有 warning )。
其次,clang plugin 这种东西,它存在的主要价值在于干预编译过程。而主这个项目只需要分析代码,所以没有必要采用这种侵入性强的实现。曾经见过一个类似的项目,实现了自定义 #pragma,也是存在这个问题。