2009년 11월 04일
많은 사람들이 착각하는 것.
많은 사람들이 아니라고 생각하지만 실제 그런 것.
1. Win32 API 레벨에서 Path Delimiter는 forward slash('/')를 지원한다. 무조건 backslash('\\') 를 사용해야 한다는 편견을 버려주시길. 다만 인터페이스 상 슬래시를 다른 용도의 delimiter로 사용할 수 있기 때문에, 지원 안하는 것 처럼 보일 수 있지만. 멀티 플랫폼을 위한 프로그래밍을 해야 한다면, 그냥 슬래시를 사용하는게 속이 편하다.
2. GNU/Linux, gcc에서 -fshort-wchar를 써서 wchar_t를 표현하는 데 UCS-2를 사용할 경우 (대부분의 GNU 플랫폼에서는 UCS-4를 사용한다. 윈도우는 UCS-2.) 시스템의 (g)libc API function을 사용하는 것을 포기해야 한다. (ex. wcslen(), wcsdup() 등) gcc 매뉴얼에서도, -fshort-wchar는 binary incompatible code를 생성한다고 명시되어 있다. 뭐 이래저래 따져볼 것 없이, 가장 간단한 문제로 Null-Terminated String을 읽어낼 수 없기 때문에(데이터는 2byte에 걸쳐있는데, libc function에서는 4byte씩 읽어대기 때문.) SIGSEGV가 빵빵 터지게 된다. 만약 멀티 플랫폼을 위한 프로그램이라면, 해당 wide character를 하나로 통일한다고 끝나는 문제가 아님을 기억해 두고, 내부에서 wcs*() 계통의 함수를 대체할 대체 함수를 같은 조건 (-fshort-wchar)에서 빌드하여 해결해야 한다.
애시당초 wchar_t 의 representation에 대한 표준이 없기 때문에 발생한 문제긴 하지만, wchar_t * 계통의 데이터를 담는 데이터를 생성하고, 다루는 플랫폼이 다를 경우에는 이를 신경 써줘야 한다.
3...
이후는 다음에 생각나면 더 적을련다.
1. Win32 API 레벨에서 Path Delimiter는 forward slash('/')를 지원한다. 무조건 backslash('\\') 를 사용해야 한다는 편견을 버려주시길. 다만 인터페이스 상 슬래시를 다른 용도의 delimiter로 사용할 수 있기 때문에, 지원 안하는 것 처럼 보일 수 있지만. 멀티 플랫폼을 위한 프로그래밍을 해야 한다면, 그냥 슬래시를 사용하는게 속이 편하다.
2. GNU/Linux, gcc에서 -fshort-wchar를 써서 wchar_t를 표현하는 데 UCS-2를 사용할 경우 (대부분의 GNU 플랫폼에서는 UCS-4를 사용한다. 윈도우는 UCS-2.) 시스템의 (g)libc API function을 사용하는 것을 포기해야 한다. (ex. wcslen(), wcsdup() 등) gcc 매뉴얼에서도, -fshort-wchar는 binary incompatible code를 생성한다고 명시되어 있다. 뭐 이래저래 따져볼 것 없이, 가장 간단한 문제로 Null-Terminated String을 읽어낼 수 없기 때문에(데이터는 2byte에 걸쳐있는데, libc function에서는 4byte씩 읽어대기 때문.) SIGSEGV가 빵빵 터지게 된다. 만약 멀티 플랫폼을 위한 프로그램이라면, 해당 wide character를 하나로 통일한다고 끝나는 문제가 아님을 기억해 두고, 내부에서 wcs*() 계통의 함수를 대체할 대체 함수를 같은 조건 (-fshort-wchar)에서 빌드하여 해결해야 한다.
애시당초 wchar_t 의 representation에 대한 표준이 없기 때문에 발생한 문제긴 하지만, wchar_t * 계통의 데이터를 담는 데이터를 생성하고, 다루는 플랫폼이 다를 경우에는 이를 신경 써줘야 한다.
3...
이후는 다음에 생각나면 더 적을련다.
# by | 2009/11/04 00:11 | 재미없는것들 | 트랙백 | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]