2013-01-15 5 views
1

Mac OS X 10.6.8이 문제를 해결하기 전까지 표준 라이브러리의 wchar_t 함수를 사용하여 코드를 컴파일 할 수 없습니다.wcscoll 함수가 중독 된 것으로 표시되어 있는데 어떻게해야합니까?

inttypes.h :의 #pragma GCC 독 stdlib.h wcstoumax wcstoimax : 서로 다른 무리

wcscoll 함수의 #pragma GCC 독 mbstowcs 함수를 mbtowc는 wcstombs가 을 wctomb를 wchar.h : GCC의 #pragma 독 fgetws fputwc fputws fwprintf fwscanf mbrtowc mbsnrtowcs> mbsrtowcs putwc putwchar swprintf swscanf vfwprintf vfwscanf vswprintf vswscanf vwprintf> vwscanf wcrtomb wcscat wcschr wcscmp wcscoll wcscpy wcscspn wcsftime wcsftime wcslcat> wcslcpy wcslen wcsncat WC sncmp wcsncpy wcsnrtombs wcspbrk wcsrchr자가 wcsrtombs wcsspn wcsstr> wcstod wcstof wcstok wcstol wcstold wcstoll wcstoul wcstoull wcswidth wcsxfrm wcwidth> wmemchr wmemcmp wmemcpy wmemmove wmemset wprintf wscanf

#include <stdio.h> 
#include <wchar.h> 
#include <string.h> 
#include <locale.h> 
#include <stdlib.h> 
extern int errno; 
int main(void) 
{ 
wchar_t pwcs1[3]={L"ØL"}, pwcs2[3]={L"Ål"}; 
size_t n; 
(void)setlocale(LC_ALL, ""); 

/* set it to zero for checking errors on wcscoll */ 
errno = 0; 
/* 
** Let pwcs1 and pwcs2 be two wide character strings to 
** compare. 
*/ 
/* n = wcscmp(pwcs1, pwcs2); */ 
n = wcscoll(pwcs1, pwcs2); 
    /* 
    ** If errno is set then it indicates some 
    ** collation error. 
    */ 
if (n < 0) { 
    printf("%s\n","Øl mindre en Ål"); 
} else if (n == 0) { 
    printf("%s\n","Øl lik Ål"); 
} else { 
    printf("%s\n","Øl større en Ål"); 
} 

if(errno != 0){ 
    /* error has occurred... handle error ...*/ 
} 
} 

나는이 문제를 어떻게 해결합니까? 나는 표준 라이브러리를 망쳐 놓는 것을 조금 망설이다. 하지만 어쩌면은 GNU C 라이브러리를 컴파일 할 수 있다고 생각합니다. Apple이 그것을 수정하지 않았다면? 아니면 넓은 문자 (Utf-8)를 다루기위한 라이브러리 사이에 다른 적합한 대안이 있는가?

나는 고대의 무언가를 이식하고 있으므로, 실제로는 ncurses를 사용해야하고, ncurses를 사용하려면 넓은 문자가 필요합니다! :)

편집 : 표준 includepath는/usr/include로 이해해야합니다. http://opensource.apple.com/tarballs/Libc/에서 최신 타르볼을했던 것처럼, 나는 SDK의 내가 가진의 포함 디렉토리를하고 있고, 헤더 파일을 통해 GREP 같은 독 프라그의이 밝혀

편집 ++

이 Hindsightly, 그 프라그 마를는 거기에 이유가 있고, 나는 대안을 찾고 있었으므로 지금은 다운로드 한 glibc를 만들려고 노력하고있다. 나는 "GCC poison"pragma가없는 헤더를 검사했다.

glibc의 구성 파일에서 조금 읽었을 때 쉬운 옵션이 아닌 것 같습니다. 나는 utf-8에서 작동하는 무언가를 해부해야하고 Mac OS X에서 ncurses를 사용하여 방법을 알아낼 것이라고 생각한다.

나는 쉬운 해결책이 간과 될 수도 있습니다. 그러나 ncurses는 7 비트 아스키로 돌아가며 이것이 내 문제입니다. 제 목표는 ncurses를 사용하면서 utf-8 언어의 특정 문자를 렌더링하는 것입니다. 형식을 "propritary"(인덱싱 포함)로 정렬 할 수 있어야합니다. 정렬 레코드에 대한 시스템 호출을 포기하는 것은 옵션이 아닙니다. 또한 필드 편집, 삽입 및 ncurses가있는 디스플레이의 문자 제거와 같은 종류의 문자열에 얼마나 많은 코드 포인트가 있는지 알 수 있어야합니다.

감사합니다.

+0

당신이 몇 가지 코드 조각을 붙여 넣을 수와까지, ICU 라이브러리 솔루션을 추구 생각 ? 오류 코드는 물론 오류 코드도 표시됩니다. –

+0

안녕하세요. 웬일인지, 그 오류는 단지 사라졌다. 그러나 기능은 아직도 단지 횡설수설을 만든다!"Øl"을 "År"과 비교하면 Øl이 År보다 큰 것을 나타내는 1의 결과를 얻습니다. 로케일 LC_ALL을 no_No-UTF-8로 설정했습니다. 그래서 의심의 여지가 없어야합니다. 신비한 이유로 코드 예제를 추가했지만 위의 결과는 이상합니다. – McUsr

답변