如何在windows上使用预处理器执行log(x)?
像这样:
#define A log(4)/log(2)
在我的代码中,数组
int b[A]; // A=2 will be computed with the preprocessor ! not in run time
发布于 2014-12-22 04:19:21
对于使用最多32位整数的LOG
宏,简短的定义可以是:
#define LOG_1(n) (((n) >= 2) ? 1 : 0)
#define LOG_2(n) (((n) >= 1<<2) ? (2 + LOG_1((n)>>2)) : LOG_1(n))
#define LOG_4(n) (((n) >= 1<<4) ? (4 + LOG_2((n)>>4)) : LOG_2(n))
#define LOG_8(n) (((n) >= 1<<8) ? (8 + LOG_4((n)>>8)) : LOG_4(n))
#define LOG(n) (((n) >= 1<<16) ? (16 + LOG_8((n)>>16)) : LOG_8(n))
但是,在使用它之前,请检查您是否真的需要它。人们经常需要对2的幂的值使用对数。例如,当实现位数组时。虽然很难将log
计算为常量表达式,但定义2的幂非常容易。因此,您可以考虑将常量定义为:
#define logA 4
#define A (1<<logA)
而不是:
#define A 16
#define logA LOG(A)
https://stackoverflow.com/questions/27581671
复制相似问题