Show / Hide Table of Contents

MSDN.WhiteKnight - Stack Overflow answers

Ответ на "C++ #define UNICODE"

Answer 875145

Link

Большинство функций WinAPI существуют в двух вариантах: ANSI (использующие текущую кодовую страницу системы) и Unicode. Эти варианты называются наборами символов (character sets). Если открыть заголовочные файлы Windows SDK, можно увидеть, что функции в них объявлены так:

#ifdef UNICODE
#define CreateFile  CreateFileW
#else
#define CreateFile  CreateFileA
#endif // !UNICODE

Использование символа препроцессора UNICODE позволяет писать код, не привязываясь к определенному набору символов: добавляя или убирая его определение, можно легко переключиться с одного на другой. Эта функциональность была полезна во времена, когда нужно было собирать приложения как под Windows 9x, не поддерживающую Unicode, так и под Windows XP. Определить символ препроцессора можно не только из кода, но и параметром компилятора (например, ключ /D в Visual C++), что позволяло иметь одинаковый код проекта и собирать его в студии разными конфигурациями под разные ОС.

Кроме того, в Visual C++ есть заголовочный файл tchar.h, который использует похожий механизм для функций стандартной библиотеки, но он использует другой символ препроцессора - _UNICODE.


Content is retrieved from StackExchange API.

Auto-generated by ruso-archive tools.

Back to top Stack Overflow answers (published from sources in GitHub repository). Copyright (c) 2020, MSDN.WhiteKnight. Content licensed under BSD 3-Clause License.
Generated by DocFX