【问题标题】:ISO C, sprintf and decimal conversion grouped with thousandsISO C、sprintf 和十进制转换以千为单位分组
【发布时间】:2012-03-01 10:29:11
【问题描述】:

我正在尝试像这样做一个简单的sprintf

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

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

这意味着(根据手册):

' 对于十进制转换 (i, d, u, f, F, g, G),输出为 如果语言环境,则与数千个分组字符分组 信息表明任何。请注意,许多版本的 gcc(1) 不能 解析此选项并将发出警告。 SUSv2 不包括 %'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)

【问题讨论】:

    标签: c iso


    【解决方案1】:

    你可以添加

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

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

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

    【讨论】:

    • 我可以请你告诉我究竟要在 Makefile 中更改什么吗?我尝试过类似o/plugin_utils.o : plugin_utils.c plugin_utils.h CFLAGS = $(filter-out -pedantic,$(CFLAGS)) 的方法,但没有成功
    • @Oliver:只需将上面的行逐字粘贴到 makefile 中,例如在实际规则之前(参见 gnu.org/software/make/manual/make.html#Target_002dspecific );不要将:= 更改为=(您需要一个简单的扩展变量,因为您在其定义中引用相同的变量),不要尝试加入规则...
    • 非常感谢你,你让我开心!
    猜你喜欢
    • 2016-02-04
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    相关资源
    最近更新 更多