Мне нравится иметь мой код предупреждения бесплатно для VS.NET и GCC, и мне нравится иметь мой 64-битный код.переполнения в дополнениях size_t
Сегодня я написал небольшой модуль, который имеет дело с буферами памяти и обеспечивает доступ к данным через интерфейс в стиле файла (например, вы можете читать байты, писать байты, искать вокруг и т. Д.).
Как тип данных для текущей позиции и размера чтения, я использовал 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!
какая версия gcc вы используете? Похоже, что они сделали size_t без знака в версиях после и включительно 2.4 – 2008-10-15 21:04:52
Версии, с которыми мне приходится иметь дело, повсюду. Я занимаюсь программированием, и иногда мне приходится использовать версии компилятора из каменного века. – 2008-10-15 21:08:02
«Подписанность» - обычное слово. – Lassi 2016-10-28 09:00:08