32bit intel cpu에 linux(2.4.20)에 gcc 3.2.2 를 쓰고 있습니다.
main()
{
const char *k="2147483648";
long chat_1;
long chat_2;
chat_1 = 2147483648; //2^31
chat_2 = atol(k);
printf("%d %u\n",chat_2,chat_1);
}
실행을 했을경우
[root@db love]# gcc -o k k.c
k.c: In function `main':
k.c:18: warning: decimal constant is so large that it is unsig
[root@db love]# ./k
2147483647 2147483648
첫번째는 : 18줄에 왜 warning이 나는지
long의 크기는 4byte이구요 unsigned long으로 해도 warning이 발생되내요.
두번째는 캐스팅이 역시나 안되내요.