Нет. Основная проблема, связанная с попыткой использовать typedef для «исправления» символьного типа, заключается в том, что в результате получается то, что на некоторых платформах соответствует встроенным функциям и литералам широких символов, а на других платформах - нет.
Если вы хотите, чтобы формат строки был одинаковым на всех платформах, вы можете просто выбрать размер и подпись. Вы хотите беззнаковые 8-битные "символы" или 64-битные "символы" со знаком? Вы можете иметь их на любой платформе, которая имеет целочисленный тип соответствующего размера (не все делают). Но они не совсем символы в том, что касается языка, поэтому не ожидайте, что они смогут вызывать strlen
или wcslen
для них или иметь хороший синтаксис для литералов. Строковый литерал (ну, конвертируется в) char*
, а не signed char*
или unsigned char*
. Широкий строковый литерал представляет собой wchar_t*
, что эквивалентно некоторому другому целочисленному типу, но не обязательно тому, который вам нужен.
Итак, вам нужно выбрать кодировку, использовать ее для внутреннего использования, определить свои собственные версии нужных вам строковых функций, реализовать их, а затем преобразовать в / из кодировки платформы по мере необходимости для нестроковых функций, которые принимают строки. utf-8 - достойный вариант, потому что большинство строковых функций Си все еще «работают» в том смысле, что они делают что-то довольно полезное, даже если это не совсем правильно.