在编译时计算宏中的数学吗?

tar*_*yte 5 c macros build-process

例如,MIN_N_THINGIES下面编译为2?或者我每次在代码中使用宏时都会重新计算除法(例如,每次迭代重新计算for循环的结束条件).

#define MAX_N_THINGIES  (10)
#define MIN_N_THINGIES  ((MAX_N_THINGIES) / 5)

uint8_t i;
for (i = 0; i < MIN_N_THINGIES; i++) {
  printf("hi");
}
Run Code Online (Sandbox Code Playgroud)

这个问题源于我仍在学习构建过程的事实.谢谢!

thi*_*his 3

预处理器将替换MIN_N_THINGIES((10)/5),然后由编译器来优化(或不优化)表达式。