Для школьного проекта я должен закодировать функцию C printf. Все идет хорошо, но есть один вопрос, на который я не могу найти хороший ответ, так что я здесь.
printf("PRINTF(d) \t: %d\n", -2147483648);
говорит мне (gcc -Werror -Wextra -Wall
):
error: format specifies type 'int' but the argument has type 'long'
[-Werror,-Wformat]
printf("PRINTF(d) \t: %d\n", -2147483648);
~~ ^~~~~~~~~~~
%ld
Но если я использую переменную int, все идет хорошо:
int i;
i = -2147483648;
printf("%d", i);
Почему?
EDIT:
Я понял много моментов, и они были очень интересными. Во всяком случае, я думаю, printf
использует <stdarg.h>
librairy, и поэтому va_arg(va_list ap, type)
также должен возвращать правильный тип. Для %d
и %i
, очевидно, возвращаемый тип является int
. Что-то меняет?