大家好,今天我在C99标准的C语言上做实验时,遇到了一个问题,我无法理解,需要专家的帮助。
代码:
#include <stdio.h>
int main(void)
{
int Fnum = 256; /* The First number to be printed out */
printf("The number %d in long long specifier is %lld\n" , Fnum , Fnum);
return 0;
}
问题:
1.)当我尝试运行这段代码时,这段代码提示我一条警告消息。
2.)但奇怪的是,当我尝试将说明符 %lld
更改为 %hd
或 %ld
时,
执行期间未显示警告消息,控制台上打印的值是正确的数字 256 ,即使我尝试使用,一切似乎也很正常
%u
, %hu
还有 %lu
long long 说明符。
3.)为什么会这样?我认为 long long 的内存大小足以容纳值 256 ,但为什么它不能用于打印出适当的值?
警告信息:(针对上述源代码)
C:\Users\Sam\Documents\Pelles C Projects\Test1\Test.c(7): warning #2234: Argument 3 to 'printf' does not match the format string; expected 'long long int' but found 'int'.
感谢您花时间阅读我的问题。上帝保佑。
最佳答案
您正在将 Fnum
变量传递给类型为 int
的 printf,但它需要 long long
。这与一个 long long 能否 容纳 256 关系不大,只是您选择的变量类型为 int
。
如果您只想打印 256,您可以获得一个类型为 unsigned long long
的常量,如下所示:
printf("The number %d in long long specifier is %lld\n" ,256 , 256ULL);
或投:
printf("The number %d in long long specifier is %lld\n" , Fnum , (long long int)Fnum);
关于C int 数据类型及其变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5571470/