ISO C, sprintf и десятичное преобразование сгруппированы с тысячами - PullRequest
2 голосов
/ 01 марта 2012

Я пытаюсь сделать простой 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)

1 Ответ

2 голосов
/ 01 марта 2012

Вы можете добавить

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

в make-файл, который должен подавить предупреждение для конкретного файла.

Если вы не хотите полагаться на нестандартные расширения libc, вам придется реализовать эту функцию самостоятельно ...

...