long int triagedOut = 0;
printf("%i", triagedOut);
main.c|89|警告:格式'%i'期望参数类型为'int',但是参数2的类型为'long int' [-Wformat=]|
对于同一行,我实际上得到了该消息两次。???
好的,所以我将它改为长整型指定符"l"然后…
printf("%l", triagedOut);
main.c|89|警告:转换格式末尾缺少类型[-Wformat=]|
main.c|89|警告:format参数太多[-Wformat-extra-args] |
这两条信息我也收到了两次。
我甚至不知道怎么会有太多的东西。只要1个。它想告诉我什么?
您需要使用%ld
代替long int
。
printf("%ld", triagedOut);
格式
%i
确实期望一个int
参数,你正在传递一个long int
,这是一个不同的类型,可能有不同的大小,取决于目标平台。格式
%l
是不完整的:l
只是一个长度修饰符,您还需要一个转换说明符,如i
,d
,u
,x
…因此提出了修正%ld
。i
和d
对于printf()
是等价的,但是对于scanf()
有不同的含义:%i
根据其初始字符来转换十进制、八进制或十六进制的整数,而%d
只转换十进制的整数。int i; sscanf("0x10", "%i", &i); // sets i to 16 sscanf("0x10", "%d", &i); // sets i to 0 sscanf("010", "%d", &i); // sets i to 10 sscanf("010", "%i", &i); // sets i to 8
你得到两次消息的原因可能是这些是警告消息,而不是阻止编译继续进行,并且你的IDE可能编译两个不同版本的可执行文件,一个在调试模式,一个在生产模式。
我认为你应该使用%ld或%li而不是%l或% I来打印长整数。
long int triagedOut = 0;
printf("%li", triagedOut);