Привет, и снова сегодня, когда я экспериментировал на языке C в стандарте C99, я столкнулся с проблемой, которую я не могу понять, и мне нужна помощь эксперта.
Код:
#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 , но почему его нельзя использовать для распечатки соответствующего значения??
Предупреждение Mesмудрец: (для приведенного выше исходного кода)
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'.
Спасибо, что потратили время на чтение моего вопроса. Бог благословит.