Учитывая максимально возможное значение, как просто выразить пространство, необходимое для записи такого числа в десятичной форме, как текст?
Реальная задача: регистрация идентификаторов процесса (pid_t
) фиксированной длины с использованием gcc в Linux. Было бы хорошо иметь выражение времени компиляции для использования в std::setw()
iomanipulator.
Я обнаружил, что заголовок linux / threads.h содержит значение PID_MAX
с максимальным значением pid, выделенным для процесса. Итак, имея
#define LENGTH(t) sizeof(#t)-1
LENGTH(PID_MAX)
будет выражением времени компиляции, но, к сожалению, это число определено в гекса:
#define PID_MAX 0x8000
Мое настоящее лучшее решение немного странно
static_cast<int>( ::floor( ::log(PID_MAX)/::log(10) + 1 ) );
Но это рассчитанная среда выполнения и использует функции из math.h