千単位のグループ化(この場合は区切り記号としてピリオドを使用)で数字を表示する必要があります。だから、私はそのようなことを達成するためにprintfフラグ'
を使用しています。数が実際にあるという事実にもかかわらず、不正な形式の文字列変換千単位の書式(アポストロフィ)のICCとprintfを使用した警告
:
警告#269:
gcc
すべてがうまく行くが、私はicc
を使用している場合、その後、私はこの警告を取得して所望のフォーマットで印刷される。例えば
私たちは、この単純なプログラムコンパイルすると、:
% ./simple 12345678 12.345.678 987654321 987.654.321
:すべてが期待どおりに機能しているにもかかわらず
% icc -o simple simple.c simple.c(10): warning #269: invalid format string conversion printf("%d \t %'d \n%lu \t %'lu \n", i, i, j, j); ^
:
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(int argc, char *argv[]) { setlocale(LC_NUMERIC, "da_DK"); int i = 12345678; unsigned long int j = 987654321; printf("%d \t %'d \n%lu \t %'lu \n", i, i, j, j); }
をし、我々はこの警告を取得だから私の質問は:
- この警告はどのようにして抑制できますか?
icc
コンパイラを使用して、printfやフレンドにフラグとして'
を使用しても安全ですか?
UPDATE:
:#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(int argc, char *argv[]) { setlocale(LC_NUMERIC, "da_DK"); int i = 12345678; unsigned long int j = 987654321; const char *strFormat = "%d \t %'d \n%lu \t %'lu \n"; printf(strFormat, i, i, j, j); }
私はちょうど
269
警告を抑制するために奇妙なトリックが形式で変数を定義し、printf
にその変数を渡していることに気づきました
更新:
printf
でアポストロフィを使用すると、コードをよりポータブルにするためにC-FAQ, question 12.11からの勧告に従い、commaprint
のそれらの実装を使用することがより有用であるかもしれない、XSI拡張(@Daveによって記載されるように)であるので。
gccは文句を言うのですか? –
コマンドラインで '-wd269'は警告を無効にしますか? – HostileFork
@PaulR: 'gcc'は' -Wall'でコンパイルしても不平を言っていません。 –