如果我编写一个使用其他预处理器常量执行操作的#define,那么每次宏在运行时出现时计算的最终值是多少?这取决于编译器中的优化,还是属于标准?
例:
#define EXTERNAL_CLOCK_FREQUENCY 32768
#define TIMER_1_S EXTERNAL_CLOCK_FREQUENCY
#define TIMER_100_MS TIMERB_1_S / 10
Run Code Online (Sandbox Code Playgroud)
将操作十分之三万二千七百六十八每次都发生在运行时我用的是TIMER_100_MS宏?
我想避免以下情况:
#define EXTERNAL_CLOCK_FREQUENCY 32768
#define TIMER_1_S EXTERNAL_CLOCK_FREQUENCY
#define TIMER_100_MS 3276
Run Code Online (Sandbox Code Playgroud)
编译器需要能够计算常量积分表达式,因为它们是在编译时计算数组大小等内容所必需的.但是,标准只说他们"可以" - 而不是"必须" - 这样做.因此,只有脑死亡编译器不会在编译时评估常量积分表达式,但是对非常规编译器的汇编输出的简单检查将验证每种情况.
c compiler-construction optimization standards c-preprocessor