c - ISO C、sprintf 和以千为单位分组的十进制转换

标签 c iso

我正在尝试做一个简单的sprintf,如下所示:

snprintf(dest, maxlen_dest, "%'lu", along);

请注意字符串中的引号:'

这意味着(根据手册):

' For decimal conversion (i, d, u, f, F, g, G) the output is to be grouped with thousands’ grouping characters if the locale information indicates any. Note that many versions of gcc(1) cannot parse this option and will issue a warning. SUSv2 does not include %'F.

因此,当我编译时,我收到此警告:

../common/utils.c:29: warning: ISO C does not support the ''' printf flag
../common/utils.c:29: warning: ISO C does not support the ''' printf flag

所以,我的问题是:是否有一个我可以使用的“支持 ''' printf 标志”的函数?

我希望我的输出是这样的:

51 254 234
 1 424 000
       ...
       ...
       ...

这是我的 Makefile(以防有一些我应该修改的选项):

CC = gcc 
# -g = all debug options
CFLAGS = -g -I../common -W -Wall -pedantic -std=c99
OBJECTS = o/main.o o/opts.o o/verif_liens_bidirectionnels.o o/ecriture.o o/plugin_utils.o o/plugin_algo_groupes.o ../common/o/cell.o ../common/o/utils.o ../common/o/verif.o ../common/o/lecture.o

gen : $(OBJECTS)
  $(CC) -o gen $(OBJECTS) $(CFLAGS) -lm -lgd -lz

o/main.o : main.c
  $(CC) -o $@ -c main.c $(CFLAGS)

o/opts.o : opts.c opts.h
  $(CC) -o $@ -c opts.c $(CFLAGS)

o/verif_liens_bidirectionnels.o : verif_liens_bidirectionnels.c verif_liens_bidirectionnels.h
  $(CC) -o $@ -c verif_liens_bidirectionnels.c $(CFLAGS)

o/ecriture.o : ecriture.c ecriture.h
  $(CC) -o $@ -c ecriture.c $(CFLAGS)

o/plugin_utils.o : plugin_utils.c plugin_utils.h
  $(CC) -o $@ -c plugin_utils.c $(CFLAGS)

o/plugin_algo_groupes.o : plugin_algo_groupes.c plugin_algo_groupes.h
  $(CC) -o $@ -c plugin_algo_groupes.c $(CFLAGS)

../common/o/cell.o : ../common/cell.c ../common/cell.h
  $(CC) -o $@ -c ../common/cell.c $(CFLAGS)

../common/o/utils.o : ../common/utils.c ../common/utils.h
  $(CC) -o $@ -c ../common/utils.c $(CFLAGS)

../common/o/verif.o : ../common/verif.c ../common/verif.h
  $(CC) -o $@ -c ../common/verif.c $(CFLAGS)

../common/o/lecture.o : ../common/lecture.c ../common/lecture.h
  $(CC) -o $@ -c ../common/lecture.c $(CFLAGS)

clean :
  rm $(OBJECTS)

最佳答案

你可以添加

../common/o/utils.o : CFLAGS := $(filter-out -pedantic,$(CFLAGS))

到 makefile,它应该抑制特定文件的警告。

如果您不想依赖非标准 libc 扩展,则必须自己实现该功能...

关于c - ISO C、sprintf 和以千为单位分组的十进制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9514527/

相关文章:

javascript - toISOString 在 Firefox 中不起作用

SwiftUI 使用编辑模式更改 View

c - append 到链接列表,代码并不总是有效

android - 如何检测 Android 应用程序是否在韩国使用?

icloud - 删除应用程序后 iOS iCloud 无法恢复

c - 我如何修复我的零钱所欠硬币的 'end of non-void function'?

MySQL 插入 ISO8601 日期时间格式

c++ - C++中的按位设置

c - 避免包含浮点类型的结构的假定范围?

C 程序 - 另一个嵌套循环问题