Определение макроса 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)