왜 int 범위에 있는 −2147483648는 lone타입으로 저장해야되나요?

소스코드 1, 2는 똑같은 내용을 출력하는 건데 코드1처럼 −2147483648을 바로 출력하면 에러가 뜨고 코드2처럼 int형 변수에 저장시켜 놓으면 잘 출력되는데 왜죠?

소스 코드1

printf("PRINTF(d) \t: %d\n", -2147483648);

코드1의 에러 내용(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

소스 코드2

int i;

i = -2147483648;
printf("%d", i); //잘 출력됨

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    C에서 2147483648가 상수 정수이고, -2147483648는 2147483648에 단항 연산자 -를 적용 시킨 것이기 때문에 상수 리터럴이 아닙니다.

    2147483648는 int에 들어가기에는 너무 큰 숫자기 때문에 상수 정수 2147483648는 long으로 인식해 코드 1처럼 바로 쓸 경우는 에러가 출력됩니다.

    본인의 컴퓨터에서 int에 맞는 최솟값을 알아보려면 <limits.h>INT_MIN 매크로를 써 보세요.

    #include <limits.h>
    
    int main(int argc, const char * argv[]) {
        printf("%d", INT_MIN);
    }
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.