У меня есть небольшая виртуальная машина для языка программирования, реализованная на C. Она поддерживает компиляцию как в 32-битной, так и в 64-разрядной архитектурах а также как C, так и С++.
Я пытаюсь сделать его компилируемым с помощью максимально возможного количества предупреждений. Когда я включаю CLANG_WARN_IMPLICIT_SIGN_CONVERSION
, я получаю каскад новых предупреждений.
Я бы хотел иметь хорошую стратегию использования int
по сравнению с явно явно неподписанными типами и/или явно выраженными. До сих пор у меня возникли проблемы с решением вопроса о том, какой должна быть эта стратегия.
Конечно, это смешение их - использование в основном int
для таких вещей, как локальные переменные и параметры, и использование более узких типов для полей в структурах - вызывает множество проблем с неявным преобразованием.
Мне нравится использовать типы более специфичного размера для структурных полей, потому что мне нравится идея явно контролировать использование памяти для объектов в куче. Кроме того, для хэш-таблиц я полагаюсь на неподписанное переполнение при хэшировании, поэтому неплохо, если размер таблицы хэша хранится как uint32_t
.
Но, если я пытаюсь использовать более конкретные типы повсюду, я нахожусь в лабиринте твистских бросков повсюду.
Что делают другие проекты C?