GCC/Cygwin的 C标准库是否已经支持C23标准中的wN和 wfN作为fprintf的长度修饰符?
我在尝试使用转换说明符 %w32i,在对 fprintf 的分别调用中打印一个 int32_t 和一个 int_least32_t。
我也尝试使用转换说明符 %wf32i 打印一个 int_fast32_t。
#include <stdint.h>
#include <stdio.h>
#include <inttypes.h>
int main(void){
int32_t i32 = 12;
int_least32_t i_least32 = 12;
int_fast32_t i_fast32 = 12;
//printf("PRIi32 i32: %"PRIi32"\n", i32);
fprintf(stdout, "w32i i32: %w32i\n", i32);
puts("\r");
//printf("PRIiLEAST32 i_least32: %"PRIiLEAST32"\n", i_least32);
fprintf(stdout, "w32i i_least32: %w32i\n", i_least32);
puts("\r");
//printf("PRIiFAST32 i_fast32: %"PRIiFAST32"\n", i_fast32);
fprintf(stdout, "wf32i i_fast32: %wf32i\n", i_fast32);
puts("\r");
}
我预期得到以下输出:
w32i i32: 12
w32i i_least32: 12
wf32i i_fast32: 12
相反,我得到以下输出
w32i i32: w32i
w32i i_least32: w32i
wf32i i_fast32: wf32i
我在Compiler Explorer上测试过,也没有得到预期的输出 链接
这段代码是使用以下工具编译的:
gcc main.c -o main.exe -std=c23 --verbose
我正在使用 gcc 版本 15.2.0。我在Windows上使用 gcc 编译器,在 MSYS 环境中,位于 MSYS2。
Cygwin C库 / GCC是否支持长度修饰符 wN 和 wfN?
解决方案
这个关于在 printf/scanf 中对位宽修饰符的支持的问题,与glibc更相关。自 glibc-2.38 起,它们就得到了支持。
Compiler Explorer上已安装 glibc-2.35。
至于 cygwin,我没有看到对数值的位宽支持的痕迹。
在当前情况下,建议使用以下这段代码:
fprintf(stdout, "w32i i_least32: " PRId32 "\n", (int32_t)i_least32);
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。