Мне нравится, когда мое предупреждение о коде бесплатно для VS.NET и GCC, и мне нравится, когда мой код готов к 64-разрядной версии.
Сегодня я написал небольшой модуль, который работает с буферами памяти и обеспечивает доступ к данным через файловый интерфейс (например, вы можете читать байты, записывать байты, искать и т. д.).
В качестве типа данных для текущей позиции чтения и размера я использовал size_t, так как это кажется наиболее естественным выбором. Я обхожу предупреждения, и это должно работать и в 64-битной версии.
На всякий случай: моя структура выглядит так:
typedef struct
{
unsigned char * m_Data;
size_t m_CurrentReadPosition;
size_t m_DataSize;
} MyMemoryFile;
Подпись size_t
на практике, по-видимому, не определена. Поиск кода Google доказал это.
Теперь я перед дилеммой: я хочу проверить дополнения с size_t
на наличие переполнения, потому что мне приходится иметь дело с данными, предоставленными пользователем, и сторонние библиотеки будут использовать мой код. Однако для проверки переполнения мне нужно знать знак. Это имеет огромное значение в реализации.
Итак, как, черт возьми, мне написать такой код независимо от платформы и компилятора?
Могу ли я проверить подписанность size_t
во время выполнения или во время компиляции? Это решило бы мою проблему. Или, может быть, size_t
изначально было не лучшей идеей.
Любые идеи?
EDIT: я ищу решение для C-языка!