2012-03-01 44 views
2

我試圖做一個簡單的sprintf這樣的:ISO C,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 [email protected] -c main.c $(CFLAGS) 

o/opts.o : opts.c opts.h 
    $(CC) -o [email protected] -c opts.c $(CFLAGS) 

o/verif_liens_bidirectionnels.o : verif_liens_bidirectionnels.c verif_liens_bidirectionnels.h 
    $(CC) -o [email protected] -c verif_liens_bidirectionnels.c $(CFLAGS) 

o/ecriture.o : ecriture.c ecriture.h 
    $(CC) -o [email protected] -c ecriture.c $(CFLAGS) 

o/plugin_utils.o : plugin_utils.c plugin_utils.h 
    $(CC) -o [email protected] -c plugin_utils.c $(CFLAGS) 

o/plugin_algo_groupes.o : plugin_algo_groupes.c plugin_algo_groupes.h 
    $(CC) -o [email protected] -c plugin_algo_groupes.c $(CFLAGS) 

../common/o/cell.o : ../common/cell.c ../common/cell.h 
    $(CC) -o [email protected] -c ../common/cell.c $(CFLAGS) 

../common/o/utils.o : ../common/utils.c ../common/utils.h 
    $(CC) -o [email protected] -c ../common/utils.c $(CFLAGS) 

../common/o/verif.o : ../common/verif.c ../common/verif.h 
    $(CC) -o [email protected] -c ../common/verif.c $(CFLAGS) 

../common/o/lecture.o : ../common/lecture.c ../common/lecture.h 
    $(CC) -o [email protected] -c ../common/lecture.c $(CFLAGS) 

clean : 
    rm $(OBJECTS) 

回答

2

您可以添加

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

到生成文件,這應該抑制特定文件的警告。

如果你不希望依靠非標準libc的擴展,你必須自己實現的功能...

+0

我可以請你告訴我到底在Makefile要改變什麼?我試過類似'o/plugin_utils.o:plugin_utils.c plugin_utils.h CFLAGS = $(filter-out -pedantic,$(CFLAGS))'但它沒有工作 – 2012-03-02 10:32:21

+0

@Oliver:只需粘貼上面的行逐字地寫入makefile,例如在實際規則之前(參見http://www.gnu.org/software/make/manual/make.html#Target_002dspecific);不要把':='改成'='(你想要一個簡單的擴展變量,因爲你在它的定義中引用了相同的變量),不要試圖加入規則...... – Christoph 2012-03-02 12:48:48

+0

非常感謝你, ! – 2012-03-02 14:07:32

相關問題