본문
2005년 12월 18일 이글루 블로그에 적었던 글.
--
1. 증상
2. 시스템환경에서 아래 코드를 실행시키게 되면 솔라리스(sparc)와 GNU/Linux (intel)에서는
c -1, n -1, size of c 1
uc 255, un 255, size of uc 1
결과를 볼 수 있으나, 1번 환경에서는
c 255, n 255, size of c 1
uc 255, un 255, size of uc 1
를 볼 수 있다.
signed char형이 signed int형으로 확장될 경우 sign bit는 그대로 확장되는 것이 정상이나 이상한 현상을 보인다.
확인한 결과, 옵션으로 -fsigned-char 를 주어야 솔라리스, 리눅스 환경에서의 결과와 같아짐.
아마도, 가져다 사용한 GCC 가 default option이 -funsigned-char로 동작하도록 빌드되어 있는것 같다.
#include
int
main(int argc, char *argv[])
{
char c;
int n;
c = 255;
n = c;
printf("c %d, n %d, size of c %dn", c, n, sizeof(c));
unsigned char uc;
int un;
uc = 255;
un = uc;
printf("uc %x, un %x, size of uc %dn", uc, un, sizeof(uc));
return 0;
}
2. 시스템 환경
$ uname -a
AIX htstest 3 5 00CEBE7F4C00 unknown unknown AIX
$ gcc --version
gcc (GCC) 4.0.2
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
3. 결론
-fsigned-char 옵션을 사용하라!
--
종이한장
최근 댓글 목록