Скажите, что мой код C использует константу RANGEMAX
, которая является наибольшей мощностью 10 штук в int
. Я могу определить его:Определить (и вычислить) константу C во время компиляции
#include <limits.h>
#if (INT_MAX < 1)
#define RANGEMAX ERROR1
#elif (INT_MAX >= 1) && (INT_MAX < 10)
#define RANGEMAX 1
#elif (INT_MAX >= 10) && (INT_MAX < 100)
#define RANGEMAX 10
#elif (INT_MAX >= 100) && (INT_MAX < 1000)
#define RANGEMAX 100
... /* well, you get the picture */
#elif (INT_MAX >= 10000000000000000)
#define RANGEMAX ERROR2
#endif
Есть более разумный способ делать такие простые вычисления в макро-фазе предварительной обработки?
И поскольку это «простые» вычисления, я предпочитаю решения, которые средний парень, как я, поймет, просто прочитав код.
Многие системы сборки, в том числе config, компилируются и запускают небольшие автономные программы для создания зависящих от машины заголовков для таких констант. – Gene