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

Windows下MinGW gcc-7.2.0中fprintf参数索引格式说明符失效

问题原因与解决办法

为什么参数索引格式说明符不工作?

你碰到的问题根源在于MinGW默认绑定微软的msvcrt.dll作为C标准库,这个库的printf系列函数(包括fprintf)并不支持POSIX风格的参数索引格式(也就是%1$d这类语法)。当msvcrt的fprintf解析%1$d时,会把$当成普通字符处理,所以最终输出就变成了$d == $d。

另外补充一点:C89标准本身并没有定义参数索引的格式说明符,这是POSIX标准的扩展特性,只有支持该扩展的C标准库才能正确解析这种格式。

如何让参数索引格式说明符正常工作?

最直接的解决办法是在编译时添加一个宏定义,让MinGW使用自身实现的符合ANSI/POSIX标准的stdio函数,而非依赖msvcrt.dll的版本。具体操作如下:

修改编译命令,加入-D__USE_MINGW_ANSI_STDIO=1选项:

gcc -Wall -std=c89 -D__USE_MINGW_ANSI_STDIO=1 -o main.exe main.c

编译完成后运行程序,就能得到预期的输出:

10 == 10

额外说明

如果你使用的是MinGW-w64,也可以选择切换到ucrt(Universal C Runtime)作为标准库,它原生支持POSIX的参数索引格式。不过上面的宏定义方法更通用,不管是传统MinGW还是MinGW-w64都能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:24:38