Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

FR: header-only amalgamation

未关闭
#981 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 12 天内回复

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
35/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
停滞
技术栈
c
领域
build-system

调研方向

先查看 cJSON.h 和 cJSON.c,然后检查 issue 中提到的基于 Make 的 release 方案。比较提出的三种分发选项和 single-header wrapper;当选定的一种 header-only 方案能够针对所述的封闭环境用例实现可复现,并且其 artifact 位置已定义时,即视为完成。

由索引模型根据 Issue 内容生成。

描述

This could be done in three ways:

  1. documentation only "how to create that (may include 2 and/or 3)"
  2. release-only: a real single header file, created automatically (for example via Make) and uploaded to the release, either with a separate name like cjson_amalg.h / cjson_standalone.h or under cJSON.h
  3. a single file stored in this repo - either with a separate name like cjson_amalg.h / cjson_standalone.h or as plain cJSON.h

The following works for a single-header wrapper:

#define CJSON_HIDE_SYMBOLS
#include <cJSON/cJSON.h>
#include <cJSON/cJSON.c>

along with the following

cJSON.h (which could be a separate condition, of course):

 #if defined(CJSON_HIDE_SYMBOLS)
-#define CJSON_PUBLIC(type)   type CJSON_STDCALL
+#define CJSON_PUBLIC(type)   static type CJSON_STDCALL
 #elif defined(CJSON_EXPORT_SYMBOLS)

cJSON.c (which possibly should be declared as static instead of nothing or CJSON_PUBLIC in any case):

 /* Duplication */
-cJSON * cJSON_Duplicate_rec(const cJSON *item, size_t depth, cJSON_bool recurse);
+CJSON_PUBLIC(cJSON *) cJSON_Duplicate_rec(const cJSON *item, size_t depth, cJSON_bool recurse);
 
 CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse)
 {
     return cJSON_Duplicate_rec(item, 0, recurse );
 }
 
-cJSON * cJSON_Duplicate_rec(const cJSON *item, size_t depth, cJSON_bool recurse)
+CJSON_PUBLIC(cJSON *) cJSON_Duplicate_rec(const cJSON *item, size_t depth, cJSON_bool recurse)
 {

Use case: mostly "closed" environments where I can't easily adjust the build system to include cJSON.c (=currently need to do it each time)

主要语言
C
星标
13k
派生
3.5k
PR 合并指标
30 天内没有已合并 PR

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

DaveGamble/cJSON 的其他 Issue

查看 DaveGamble/cJSON 的全部 Issue

相似的 Issue

更多 C Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。