C int数据类型及其变体

car*_*995 1 c variables int types

问候,今天当我在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;
   }
Run Code Online (Sandbox Code Playgroud)

问题:

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'.
Run Code Online (Sandbox Code Playgroud)

感谢您花时间阅读我的问题.上帝保佑.

yan*_*yan 6

你将Fnum变量传递给printf,这是打字的int,但它是期待的long long.这与长long是否可以容纳256只有很小的关系,只是你选择的变量是键入的int.

如果你只想打印256,你可以获得一个输入的常量,unsigned long long如下所示:

printf("The number %d in long long specifier is %lld\n" ,256 , 256ULL);
Run Code Online (Sandbox Code Playgroud)

或演员:

printf("The number %d in long long specifier is %lld\n" , Fnum , (long long int)Fnum);
Run Code Online (Sandbox Code Playgroud)