0
我需要用数千个分组显示一些数字(在这种情况下,使用句点作为分隔符)。所以,我使用printf标志'
来实现这样的事情。使用ICC和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
所以我的问题是:
- 该警告如何被抑制?
- 使用
'
作为flagf与printf和朋友,使用icc
编译器安全吗?
UPDATE:
我刚刚意识到,一个奇怪的伎俩打压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);
}
UPDATE:
因为使用单引号与printf
是一个XSI扩展(如@戴夫说),为了使代码更容易移植可能更有用遵循从C-FAQ, question 12.11建议,并利用其执行commaprint
。
gcc是否抱怨? – 2012-04-19 18:53:54
命令行上的'-wd269'是否禁用警告? – HostileFork 2012-04-19 19:09:11
@PaulR:'gcc'不会抱怨,即使用'-Wall'编译。 – 2012-04-19 19:24:53