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

error: conversion from 'double' to 'float' may change value [-Werror=float-conversion]

未关闭 适合新手
#963 5 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 12 天内回复

@coveyjorjet 已经在做这个了。

开始于 2026年8月1日。

  • #1061 来自 @coveyjorjet —— 未关闭

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
62/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
冷清
技术栈
c, cmake
领域
build-system

调研方向

使用 CMake FetchContent 重现严格警告构建,并检查报告认定为失败位置的 print_number 中 cJSON.c 第 607 行附近。将编译器诊断与周围的数学检查进行比较,并运行 cJSON 构建和测试;当库在不抑制错误的情况下使用报告的警告标志成功构建时,即表示完成。

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

描述

Description
I encountered a compilation error when integrating cJSON into my C++ project via CMake's FetchContent. The build fails at line 607 in cjson.c with the following error:

error: conversion from 'double' to 'float' may change value [-Werror=float-conversion]

Environment

  • cJSON Version: v1.7.19
  • Compiler: gcc version 15.1.0 (x86_64-win32-seh-rev0, Built by MinGW-Builds project)
  • Build System: cmake version 4.0.2 (CMake; JetBrains IDE bundle; build 1)
  • OS: Windows 11

Steps to Reproduce

  1. Configure CMake to include cJSON via FetchContent:
    include(FetchContent)  
    FetchContent_Declare(  
      cjson  
      # actualy I downloaded form release and use `SOURSE_DIR` to include it
      GIT_REPOSITORY https://github.com/DaveGamble/cJSON.git  
      GIT_TAG v1.7.19
    )  
    FetchContent_MakeAvailable(cjson)  
    target_link_libraries(my_target cjson)  
    
  2. Enable strict warnings (e.g., -Werror=float-conversion).
  3. Build the project.

Error Log

"D:\software\CLion 2024.3.5\bin\cmake\win\x64\bin\cmake.exe" --build D:\projects\prj-terminal\cmake-build-debug --target prj_terminal -j 22
[1/3] Building C object _deps/cjson-build/CMakeFiles/cjson.dir/cJSON.c.obj
FAILED: _deps/cjson-build/CMakeFiles/cjson.dir/cJSON.c.obj 
D:\software\mingw64\bin\cc.exe -DCJSON_API_VISIBILITY -DCJSON_EXPORT_SYMBOLS -DENABLE_LOCALES -Dcjson_EXPORTS  -std=c89 -pedantic -Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wshadow -Winit-self -Wcast-align -Wformat=2 -Wmissing-prototypes -Wstrict-overflow=2 -Wcast-qual -Wundef -Wswitch-default -Wconversion -Wc++-compat -fstack-protector-strong -Wdouble-promotion -Wparentheses -Wformat-overflow -Wunused-macros -Wmissing-variable-declarations -Wswitch-enum -fvisibility=hidden -g -std=gnu11 -fdiagnostics-color=always -MD -MT _deps/cjson-build/CMakeFiles/cjson.dir/cJSON.c.obj -MF _deps\cjson-build\CMakeFiles\cjson.dir\cJSON.c.obj.d -o _deps/cjson-build/CMakeFiles/cjson.dir/cJSON.c.obj -c D:/projects/prj-terminal/third_party/cJSON-1.7.19/cJSON.c
In file included from D:/projects/prj-terminal/third_party/cJSON-1.7.19/cJSON.c:42:
D:/projects/prj-terminal/third_party/cJSON-1.7.19/cJSON.c: In function 'print_number':
D:/projects/prj-terminal/third_party/cJSON-1.7.19/cJSON.c:607:15: error: conversion from 'double' to 'float' may change value [-Werror=float-conversion]
  607 |     if (isnan(d) || isinf(d))
      |               ^
D:/projects/prj-terminal/third_party/cJSON-1.7.19/cJSON.c:607:27: error: conversion from 'double' to 'float' may change value [-Werror=float-conversion]
  607 |     if (isnan(d) || isinf(d))
      |                           ^
cc1.exe: all warnings being treated as errors
ninja: build stopped: subcommand failed.

Proposed Solution
The error occurs due to an implicit double-to-float conversion.
I asked ai, and it told me that to resolve this, consider:

  1. Explicitly casting the result to float (if precision loss is acceptable).
  2. Using -Wno-float-conversion for cJSON (not ideal for strict compliance).
  3. Refactoring the calculation to avoid precision loss warnings.

Additional Context

  • This issue arises when compiling with strict warning flags (e.g., -Werror).
  • The problematic code is in the parse_hex4 function (line 607 in latest master).

I wander if there is a way to solve this without remove the flag Werror=float-conversion


I'm still learning Cpp and Cmake. So if you would be willing to help me, I would greatly appreciate it. Thank you for reading my issue. Let me know if you need more details!

主要语言
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 摘要。