数千のグループでいくつかの数値を表示する必要があります(この場合、区切り文字としてピリオドを使用します)。だから、私はその'ようなことを達成するためにprintfフラグを使用しています。
gccすべてがうまくいきますが、を使用するとicc、次の警告が表示されます。
警告#269:無効なフォーマット文字列変換
番号が実際に希望の形式で印刷されているという事実にもかかわらず。
たとえば、この単純なプログラムをコンパイルすると、次のようになります。
#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 -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);
                                          ^
すべてが期待どおりに機能するという事実にもかかわらず:
% ./simple 
12345678         12.345.678 
987654321        987.654.321 
だから私の質問は:
- この警告をどのように抑制できますか?
- コンパイラを使用'して、printfやその仲間と一緒にフラグとして使用しても安全ですか?icc
更新:
269警告を抑制するための奇妙なトリックは、フォーマットを使用して変数を定義し、その変数をprintf:に渡すことであることに気づきました。
#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);
}
更新:
でアポストロフィを使用するprintfのはXSI拡張機能であるため(@Daveで述べられているように)、コードの移植性を高めるには、C-FAQの質問12.11の推奨事項に従い、の実装を使用する方が便利な場合がありcommaprintます。