Определение макроса UINT_MAX

Я хотел бы знать, есть ли конкретная причина для определения макроса UINT_MAX как (2147483647 * 2U + 1U) а не прямо его истинное значение (4294967295U) в climits заголовочный файл

Спасибо вам всем.

1 ответ

Решение

Что касается скомпилированного кода, то не будет никакой разницы, потому что компилятор будет оценивать оба константных выражения для получения одинакового значения во время компиляции.

определяющий UINT_MAX с точки зрения INT_MAX позволяет вам повторно использовать константу, которую вы уже определили:

#define UINT_MAX (INT_MAX * 2U + 1U)

На самом деле, это очень много, что делает заголовок Clang, повторно используя внутреннюю константу __INT_MAX__ для обоих INT_MAX а также UINT_MAX:

#define INT_MAX   __INT_MAX__
#define UINT_MAX  (__INT_MAX__  *2U +1U)
Другие вопросы по тегам