gcc 컴파일러에 따라서 char의 기본형을 다르게 인식한다.
일반적으로 'char str;' 이라고 선언을 하게 되면 'signed char str;'로 선언한 것과 같은 의미를 지닌다.
하지만, ARM 계열 컴파일러에서는 char의 기본형이 unsigned로 되어 있다. 즉, 'char str;' 이라고 선언한다면, 내부적으로 'unsigned char str;' 로 선언한 것과 동일하다.
컴파일러에 따라 기본형이 다르게 변한다는 것은 언뜻 보기에는 별 문제가 없을 것 같지만, 프로그램 동작에는 치명적으로 동작할 수 있다.
아래 코드와 같이 char 변수에 '-1'을 사용한다면..??
char Get_Type(void) { char str; str = -1; return str; } |
char 형의 선언에 따라서 해당 변수는 -1(signed char)을 가질 수도 있고, 255(unsigned char)의 값을 가질수도 있다.
상기와 같이 char형 변수가 컴파일러에 의해 어떠한 형식으로 결정되는지에 따라서 동작이 다르게 된다.
위 문제를 해결하기 위해서는 컴파일 옵션으로 기본형을 지정할 수 있다.
char 선언시 기본값을 signed char로 설정
-fsigned-char |
char 선언시 기본값을 unsigned char로 설정
-funsigned-char |
상기와 같이 컴파일 옵션을 이용하여 char 변수의 기본형을 지정할 수 있다.
'Linux > Tip!' 카테고리의 다른 글
네트워크 인터페이스 확인 방법 (0) | 2015.10.29 |
---|---|
동작중인 프로세의 File Descriptor 확인 방법 (0) | 2015.10.28 |
e2fsck! HDD 복구 방법 (0) | 2014.05.19 |
Subversion(SVN) 백업 및 복구 (0) | 2014.05.13 |
Linux 폴더별 용량 확인! (2) | 2014.05.13 |