2016-08-16 6 views
1
다음과 같이 콘솔 기능 wincon.h의 윈도우 API 부분은 CHAR_INFO 데이터 구조를 정의

:올바른 사용

typedef struct _CHAR_INFO { 
    union { 
     WCHAR UnicodeChar; 
     CHAR AsciiChar; 
    } Char; 
    WORD Attributes; 
} CHAR_INFO, *PCHAR_INFO; 

그래서 우리는 8 비트의 조합 및 16 비트를 문자는 각각 ASCII 및 Unicode 문자를 나타냅니다. 일반적으로 C에서 공용체를 처리해야하는 경우 공용체에 태그를 지정해야합니다. 즉, 사용중인 공용체의 필드를 나타내는 추가 필드가 있습니다. 여기서는 (Attributes이 다른 용도로 사용됩니다.)이 데이터 유형의 값을 올바르게 사용하는 방법이 궁금합니다.

API의 기능이 실제로이 구조 또는 유사한 구조를 사용하는 경우, ASCII 변형의 경우 A이라는 접미어가 붙거나 2 개의 변형이있는 함수에서만 사용된다는 것을 알 수 있습니다. W (유니 코드 변형의 경우).

이 함수의 A 변형은이 구조의 AsciiChar 필드 만 사용하고 W 변형은 UnicodeChar 필드 만 사용한다고 가정하면 절약 할 수 있습니까? 그렇지 않은 경우 실제로 사용되는 필드가 실제로 사용되고 어떻게 하나의 필드를 다른 필드로 변환 하는지를 어떻게 알 수 있습니까? MSDN documentation은 여기에서 올바른 사용법에 대해서는 언급하지 않습니다.

+0

모두 대문자 자작 이름이 표준 유형과 다른 경우가 아니면 8 비트 또는 16 비트 문자가 없습니다. 표준 이름을 사용하지 않고 자극적 인 대문자 버전이있는 이유는 무엇입니까? 그리고 당신은 "노조에 태그를 부착"할 수 없습니다. 당신은'struct' (또는 그 반대)로 포장해야합니다. – Olaf

+0

예, 유니 코드 정의 여부에 따라 콘솔 API는 두 가지 형태로 제공됩니다. 예, A 및 W 변형입니다. 약 10 년 전에 문제가 멈추었습니다. 실제 구현은 항상 유니 코드입니다. A flavor api는 로컬 코드 페이지로 변환되어 AsciiChar 변형을 생성합니다. 우연히 유니 코드 호환 C 또는 C++ 코드를 작성하는 일은 결코 일어나지 않으며, CHAR_INFO.Char.UnicodeChar를 사용할 때 항상 알 수 있습니다. 그들이 TCHAR를 사용하지 않았거나 AnsiChar btw라는 이름의 미스테리 한 비트는 아마도 그게 전부라고 생각한 디자이너가 있었을 것입니다 :) –

+0

@Olaf : 죄송합니다, 귀하의 의견을 이해할 수 없습니다. 위의 구조는 Windows API의'wincon.h' 헤더 파일에있는 정의의 문자 그대로의 사본이며, 대문자 유형 이름은 윈도우 API가 8 비트가되도록'CHAR '를 정의하고, WCHAR '이 16 비트 문자 ([여기] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85) .aspx) 참조). 또한, 구조체에 포장 된 조합 _is_. – siracusa

답변

1

따라서이 함수의 A 변형은이 구조의 AsciiChar 필드 만 사용하고 W 변형은 UnicodeChar 필드 만 사용한다고 가정합니다.

예.