사이드바 영역으로 건너뛰기

GCC 4.0.2 와 AIX 5.3에서 발생하는 char형 문제

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 옵션을 사용하라!


--
종이한장
진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크