You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何同一翻译单元的miniz.c文件出现同名标识符重复定义?

关于miniz-3.0.2编译时C2086重定义错误的解答

这确实属于代码编写上的疏漏(作者的失误)。

原因在于C语言中,static变量的作用域仅限当前源文件:

  • 你看到的第一行static const mz_uint s_tdefl_num_probes[11];是暂定定义,仅声明了变量的类型和存在,但未赋值;
  • 后面带初始化的static const mz_uint s_tdefl_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 };是完整定义。

部分编译器(比如GCC)对同一文件内的这类重复static定义会宽松处理,但Visual Studio的C编译器(MSVC)遵循更严格的标准,直接判定为重定义并抛出C2086错误。

解决办法

直接删除前面那个无初始化的static const mz_uint s_tdefl_num_probes[11];声明即可,保留带初始化的定义——带初始化的定义本身已经包含了声明的作用,完全能满足代码对该变量的使用需求。

内容的提问来源于stack exchange,提问作者Zebrafish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:22:17