首页 > 解决方案 > 是否有一种标准方法可以保证在编译(翻译)时评估某个(常量)表达式?

问题描述

我很惊讶 C 不能保证在编译(翻译)时评估某些(常量)表达式。

C11(6.6 常量表达式)(强调):

可以在翻译期间而不是运行时评估常量表达式,...

因此,有两个问题:

  1. 是否有一种标准方法可以保证在编译(翻译)时评估某个(常量)表达式?
  2. 额外的问题:为什么C不保证呢?保证它的(技术)障碍是什么?

标签: clanguage-lawyerc11constant-expressionc17

解决方案


可能只是对英语的稍微模棱两可的使用:术语“can”在这里(恕我直言)用于表达表达式是编译时可评估的逻辑可能性,而不是可选的实现指令。

如果我们从标准中引用您引用的段落的全文(强调的粗斜体是我的),那么我相信可以保证评估在编译时有效地进行:

6.6 常量表达式
……<br/>

描述
2 常量表达式可以在翻译期间而不是运行时进行计算,因此可以在常量可能存在的任何地方使用


推荐阅读