Почему K&R не определяет длины типов данных лучше?

Каждый современный язык программирования, с которым я столкнулся, имеет четко определенные типы данных. Java, например, имеет int это ровно 32 бита и long это ровно 64 бита. Это не зависит от реализации, но встроено в саму спецификацию. С, с другой стороны, имеет short это по крайней мере 16 бит, int это по крайней мере 16 бит, и long это как минимум 32 бита. Поскольку он определен как минимум, он может быть намного больше, что приводит к серьезным проблемам с переносимостью.

Я никогда этого не понимал. Я всегда считал это результатом различий в аппаратных стандартах 1970-х годов, но на самом деле это не имеет смысла для меня. Даже если бы было много компьютеров, которые не могли обрабатывать 64-битные типы данных, это не оправдывает отсутствие определения short как обязательно 16 бит и int как обязательно 32 бита. Из стандартов мы уже видим 32 бита как минимальное требование для любого оборудования.

Это распространение стандартов привело к появлению совета, подобного следующему, взятого из статьи Как сделать C (по состоянию на 2016 год):

Если вы обнаружите, что печатаете char или же int или же short или же long или же unsigned в новый код, вы делаете это неправильно.

Для современных программ, вы должны #include <stdint.h>затем используйте стандартные типы.

Для получения более подробной информации см. stdint.h Спецификация.

Общие стандартные типы:

  • int8_t, int16_t, int32_t, int64_t - целые числа со знаком
  • uint8_t, uint16_t, uint32_t, uint64_t - целые числа без знака
  • float - стандартная 32-битная с плавающей точкой
  • double - стандартная 64-битная с плавающей точкой

Обратите внимание, у нас нет char больше. char на самом деле неправильно назван и неправильно используется в C.

Разработчики обычно ругают char означать "byteДаже когда они делают без знака byte Манипуляции. Гораздо чище использовать uint8_t означать единичное значение без знака-байта / октета и uint8_t * означать последовательность значений беззнаковых байтов / октетов.

Я также заметил немало советов, рекомендующих использовать size_t в качестве стандарта перейдите к int замена, как в Modern C Дженсом Гастедтом, который использует size_t в качестве управляющей переменной в for Цикл в самом первом примере книги.

Мой вопрос в два раза:

1. Почему K&R 2 не определил типы данных более определенно в 1978 году?

2. Что в 2018 году мы должны делать с нашими выборами типов данных, или это все просто стиль и соглашение, и они высоко оценены?

0 ответов

Другие вопросы по тегам