Проходя по файлу wchar.h в системе Mac OS X, я обнаружил, что эквивалент wchar_t функций str, таких как wcscpy, wcscat, отравлен, когда __cplusplust не определен, а максимальный размер wchar_t составляет 2 байта (с помощью параметра компилятора -fshort -wchar).
Похоже, что для программы на Си такие функции не разрешены, если определен -fshort-wchar. Я хотел бы знать, что означает использование функций wchar_t при использовании -fshort-wchar?
Вы можете спросить, почему мне нужно использовать -fshort-wchar. Потому что я портирую приложение, изначально написанное для Windows, где размер wchar_t составляет два байта. И эти данные, содержащиеся в строке wchar_t, записываются в файл и также обмениваются между двумя приложениями.
Каков хороший способ справиться с изменчивостью wchar_t на разных платформах? В Windows предполагается, что значение wchar_t составляет 16 бит.
-fshort-wchar
не может использоваться, если вы хотите взаимодействовать с какой-либо частью стандартной библиотеки или кода сторонней библиотеки, используя правильное (32-разрядное) определение wchar_t
, Ситуации, когда это жизнеспособно, очень ограничены и, вероятно, относятся главным образом к автономно-внедренным / внедренным вещам.
В случае переноса приложения Windows, с которым вы имеете дело, я думаю, что вы должны просто выполнить поиск и замену, чтобы изменить эти варианты использования wchar_t
в WCHAR
(который вы можете определить) или char16_t
(определяется C11, и вы можете предоставить собственное определение до C11).
Если мы пойдем с typedef uint16_t Char;
Как насчет строковых литералов в коде? и проблема третьей стороны остается прежней. Они должны быть преобразованы в wchar_t (UTF-32_ перед передачей.