본문 바로가기

Linux/Tip!

gcc : char 기본형 설정 방법(signed/unsigned)



 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 변수의 기본형을 지정할 수 있다.