Смысл использования -fshort-wchar

Проходя по файлу 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 бит.

5

Решение

-fshort-wchar не может использоваться, если вы хотите взаимодействовать с какой-либо частью стандартной библиотеки или кода сторонней библиотеки, используя правильное (32-разрядное) определение wchar_t, Ситуации, когда это жизнеспособно, очень ограничены и, вероятно, относятся главным образом к автономно-внедренным / внедренным вещам.

В случае переноса приложения Windows, с которым вы имеете дело, я думаю, что вы должны просто выполнить поиск и замену, чтобы изменить эти варианты использования wchar_t в WCHAR (который вы можете определить) или char16_t (определяется C11, и вы можете предоставить собственное определение до C11).

4

Другие решения

Если мы пойдем с typedef uint16_t Char;

Как насчет строковых литералов в коде? и проблема третьей стороны остается прежней. Они должны быть преобразованы в wchar_t (UTF-32_ перед передачей.

2

По вопросам рекламы [email protected]