Тема: Кодировка символов в версиях для ОС Windows и Linux
Здравствуйте.
Заметил особенность в размерах символов между версиями для ОС Windows и Linux.
При кодогенерации использование типа wchar_t приводит к размеру 2 байта в Windows. С другой стороны, ОС Linux считает размер wchar_t как 4 байта.
Это приводит к проблеме, если создается платформонезависимое решение, которое должно общаться с сгенерированными графическими объектами.
Пробовал решить проблему с помощью изменения заголовка GraphLib.h. А именно изменением строк:
#include <wchar.h>
typedef wchar_t char_un; /* для Unicode строк */
=>
#include <uchar.h>
typedef char16_t char_un; /* для Unicode строк. Измененный тип wchar_t на char16_t */
или
typedef unsigned short int char_un; /* для Unicode строк. Измененный тип wchar_t на unsigned int */
При замене префикса с "L" на "u" по-началу все отображалось хорошо. Но потом возникла новая проблема. В одном из проектов у графического объекта используется функция форматирования текста:
format("%02d:%02d:%02d", 1, 12, 3)
При кодогенерации это приводит к вызову C-функции vswprintf, которая подразумевает использование только типа wchar_t:
int vswprintf (wchar_t * ws, size_t len, const wchar_t * format, va_list arg );
Графический симптом проблемы выглядит как отображение строки %02d:%02d:%02d на экране.
Подскажите, пожалуйста, как можно сделать размер входной структуры одинаковым в обоих ОС и что бы при этом на экране корректно отображался форматированный текст?
Заранее спасибо за ответ.