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은 여기에서 올바른 사용법에 대해서는 언급하지 않습니다.
모두 대문자 자작 이름이 표준 유형과 다른 경우가 아니면 8 비트 또는 16 비트 문자가 없습니다. 표준 이름을 사용하지 않고 자극적 인 대문자 버전이있는 이유는 무엇입니까? 그리고 당신은 "노조에 태그를 부착"할 수 없습니다. 당신은'struct' (또는 그 반대)로 포장해야합니다. – Olaf
예, 유니 코드 정의 여부에 따라 콘솔 API는 두 가지 형태로 제공됩니다. 예, A 및 W 변형입니다. 약 10 년 전에 문제가 멈추었습니다. 실제 구현은 항상 유니 코드입니다. A flavor api는 로컬 코드 페이지로 변환되어 AsciiChar 변형을 생성합니다. 우연히 유니 코드 호환 C 또는 C++ 코드를 작성하는 일은 결코 일어나지 않으며, CHAR_INFO.Char.UnicodeChar를 사용할 때 항상 알 수 있습니다. 그들이 TCHAR를 사용하지 않았거나 AnsiChar btw라는 이름의 미스테리 한 비트는 아마도 그게 전부라고 생각한 디자이너가 있었을 것입니다 :) –
@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