префиксы SZ и pwsz в WinAPI

Я немного запутался с венгерскими префиксами нотации В WinAPI для строк CHAR и строк WCHAR. При использовании строки CHAR обычно используется такой префикс:

CHAR szString[] = "Hello";

у нас есть строка с нулевым концом szString, поэтому все в порядке. Но когда мы используем строку WCHAR, обычно используется такой префикс:

WCHAR pwszString[] = L"Hello";

это означает указатель на широкую строку с нулевым концом... но наш тип не выглядит так. Указатель на оканчивающуюся нулем строку это WCHAR * * или PWSTR*. Я ошибаюсь? Почему это sz для строк CHAR и pwsz, но не wsz для строк WCHAR?

2 ответов


второй пример вводит в заблуждение (хотя и не редкость). Это должно быть одно из двух:

WCHAR wszString[] = L"Hello";
WCHAR *pwszString = L"Hello";

поскольку массив может использоваться в большинстве контекстов, в которых ожидается указатель, некоторые программисты немного небрежно относятся к различию.

венгерский не в стиле, но это может быть полезно при использовании хорошо.


CHAR szString [] является синонимом CHAR * szString. Оба являются указателями на строки. Указатель на строку с нулевым концом - CHAR*, а указатель на широкую строку с нулевым концом - WCHAR* (не WCHAR**).

теперь, если вы хотите стать педантичным, вы можете (ошибочно) утверждать, что CHAR [] - это "просто массив символов", и в этом случае "rgc" может быть правильным префиксом.