Еще со времен первого компилятора C для перепрограммируемого микрокомпьютера общего назначения часто в коде было необходимо использовать типы, которые содержат ровно 8, 16 или 32 бита, но до 1999 года стандарт не применялся.t явно предоставить программам возможность указать это.С другой стороны, почти все компиляторы для 8-битных, 16-битных и 32-битных микрокомпьютеров определяют "char" как 8 бит, "short" как 16 бит и "long" как 32 бит.Единственное различие между ними заключается в том, является ли значение int 16-разрядным или 32-битным.
В то время как 32-разрядный или более мощный ЦП может использовать «int» в качестве 32-разрядного типа, оставляя «long» доступным как 64-битного типа, существует существенный корпус кода, который ожидает, что «long» будет 32-битным.В то время как Стандарт C добавил типы «фиксированного размера» в 1999 году, в Стандарте есть и другие места, в которых все еще используются «int» и «long», такие как «printf».В то время как C99 добавил макросы для предоставления правильных спецификаторов формата для целочисленных типов фиксированного размера, существует значительный объем кода, который ожидает, что «% ld» является допустимым спецификатором формата для int32_t, поскольку он будет работать практически на любых 8-битных, 16-битная или 32-битная платформа.
Имеет ли смысл иметь "длинный" 32-битный, из уважения к существующей кодовой базе, уходящей в прошлое на десятилетия или 64-битный, чтобыизбегать необходимости более подробных "long long" или "int64_t" для идентификации 64-битных типов - это, вероятно, вызов для суждения, но, учитывая, что новый код должен, вероятно, отдавать предпочтение использованию типов указанного размера, когда это практически возможно, я неуверен, что я вижу неоспоримое преимущество в создании «длинных» 64 битов, если только «int» также не 64 бит (что создаст еще большие проблемы с существующим кодом).