아래의 코드에서 첫 번째 f()
호출은 으로 전달한 -2
을 대신 인쇄하는 이유는 무엇입니까?가변 함수의 정수 승격
#include <stdio.h>
#include <stdint.h>
#include <stdarg.h>
#include <stdlib.h>
void f(int64_t i, ...)
{
va_list ap;
int64_t j;
va_start(ap, i);
j = va_arg(ap, int64_t);
printf("%jd %jd\n", (intmax_t) i, (intmax_t) j);
va_end(ap);
}
int main()
{
f(-1, -2); // Prints -1 4294967294 (bug!)
f(-1, (int64_t) -2); // Prints -1 -2 (fix!)
return 0;
}
왜 두 번째 f()
수정 프로그램이 작동하는지 이해할 수 있습니다. 그러나 처음 f()
호출이이 문제를 일으키는 이유를 이해할 수 없습니다. 이 행동에 대해 설명해 주시겠습니까?