728x90
728x90

비쥬얼스튜디오에 생성된 프로젝트에서 마우스 우클릭하여 속성>구성 속성>고급에 들어간다.


 

 

문자 집합 설정을 보면 유니코드 문자 집합 사용, 멀티바이트 문자 집합 사용 모드를 볼 수 있다.
윈도우 프로젝트 기본 설정은 유니코드 환경으로 되어있다.

 

 

 

 

문자집합은 2진법으로도 문자를 처리하기 위해 탄생한 것이고,
유니코드는 세계 모든 문자를 컴퓨터에서 일관되게 표현, 처리하기 위한 국제 표준 문자집합이다.

과거 하위버전의 비주얼스튜디오에서 작성했거나 멀티바이트 문자집합으로 작성한 프로젝트를 유니코드 문자 집합 환경으로 열면 오류가 발생한다.

 

 

문자집합 3종류 (출처)

  • SBCS(Single Byte Character Set) : 문자 하나를 표현 하는데 있어 1바이트를 사용 (예: 아스키코드, ..)
  • MBCS(Multi Byte Character Set) : 문자 하나를 표현 하는데 있어 다양한 바이트 수를 사용  
  • WBCS(Wide Byte Character Set) : 문자 하나를 표현 하는데 있어 2바이트를 사용 (예: 유니코드, ..)

 

비주얼스튜디오 문자집합은 비주얼스튜디오 프로젝트 생성 시 정의되는 기본 매크로의 차이가 있다.
프로젝트에서 마우스 우클릭하여 속성>C/C++>고급에 들어간다.

 

 

 

전처리기 preprocesser

프로그램을 컴파일할 때 컴파일 직전에 실행되는 별도의 프로그램. 전처리기가 실행되면 각 코드 파일에서 지시자(directives, #으로 시작해서 줄 바꿈으로 끝나는 코드)

전처리기는 컴파일러가 실행되기 직전에 단순히 텍스트를 조작하는 치환 역할을 하기도 하고, 디버깅에도 도움을 주며 헤더 파일의 중복 포함도 방지해주는 기능을 가진다. (#include <...>, #define ..., )

 

 

각각 유니코드/멀티바이트 문자집합 설정 시

 

전처리 과정에서 매크로 값의 차이로 인해 헤더에 선택되는 자료형 및 함수가 달라진다.

 

 

비주얼스튜디오 유니코드 문자집합과 멀티바이트 문자집합의 차이점 

멀티바이트 : 한 문자에 할당하는 공간이 일정하지 않다 (영어 : 1바이트, 다국어 2바이트)
유니코드 : 항상 2바이트 할당. 외국어 윈도우에서도 한글이 깨지지 않고, 다국어버전을 만들기 쉽다

char str = "문자열"; //멀티바이트
wchar_t  = L"문자열"; //유니코드

https://lunikism.com/entry/C-%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-%EB%8B%AC%EB%9D%BC%EC%A7%80%EB%8A%94-%EC%A3%BC%EC%9A%94-%ED%95%A8%EC%88%98

 

기존 멀티바이트 환경에서는 문자열을 입력할 때 큰따옴표(" ") 안에 정의했지만, 유니코드 환경에서는 큰따옴표 앞에 대문자 L을 넣어줘야한다. TCHAR에서 제공하는 통합형 매크로는 TEXT나 _T를 큰따옴표 앞에 넣어주면 된다.

char chTest[50] = "ABCDEFG"; //멀티바이트
wchar_t wchTest[50] = L"ABCDEFG"; //유니코드
TCHAR tchTest[50] = TEXT("ABCDEFG");    //또는 _T("ABCDEFG"); //TCHAR 통합형 매크로


호환성을 위해 환경에 맞게 유니코드, 멀티바이트 변환되는 TCHAR 타입을 쓰는 게 좋다.
그러면 유니코드, 멀티바이트 모두에서 사용 가능하다.

#include <tchar.h>
...
TCHAR str = TEXT("문자열"); //컴파일 환경에 따라 바뀐다
// 혹은
_T("문자열");

 

3가지 버전이 어떤 값을 뱉어낼 지 생각하며 써야 한다.
그리고 웬만하면 TCHAR 타입을 쓰는 게 좋다.

https://lunikism.com/entry/C-%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-%EB%8B%AC%EB%9D%BC%EC%A7%80%EB%8A%94-%EC%A3%BC%EC%9A%94-%ED%95%A8%EC%88%98
https://lunikism.com/entry/C-%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-%EB%8B%AC%EB%9D%BC%EC%A7%80%EB%8A%94-%EC%A3%BC%EC%9A%94-%ED%95%A8%EC%88%98

 

 

비주얼스튜디오 유니코드 문자집합과 멀티바이트 문자집합 결론

옵션은 프로젝트 상황에 따라서, 코드는 TCHAR로.

728x90
728x90

'C, C++' 카테고리의 다른 글

[MFC] CStdioFile과 CFile의 차이점  (0) 2021.10.22
[C++] POSIX function names 오류  (0) 2021.10.19
함수의 인수 전달 방법 3가지  (0) 2021.09.27
콜론연산자(:), 더블콜론연산자(::)  (1) 2021.09.25
C 구조체  (0) 2021.09.12
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v