相关疑难解决方法(0)

是在编译时还是在运行时评估常量C表达式?

如果我编写一个使用其他预处理器常量执行操作的#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

31
推荐指数
7
解决办法
2万
查看次数