回答
C11,6.6节的一部分:
常量表达式可以在翻译过程中,而不是进行评估运行时间,因此可以用于常量可能存在的任何地方。
所以是简单常量折叠是强制性的,此代码段是有效的标准C.
谢谢!这是在旧版本的标准中的情况吗? –
@MikeGraham:我没有旧版本的标准版,但它似乎甚至[MSVC](http://msdn.microsoft.com/en-us/library/tby3xex3(v = vs.80))。 aspx)使用这个定义,这表明它存在于C89中。 –
@MikeGraham C89标准似乎有所有相关部件出现,所以是的。 – Khoth
标准明确地定义了这一点。
组声明,6.7.5.2(C99):
除了可选的类型合格音响ERS和关键字静态的,则[ 和]可限定表达式或*。如果它们定义了一个表达式 (它指定了一个数组的大小),表达式应该有一个整数类型 。如果该表达式是一个常量表达式,则其应该具有大于零的值。
- 1. std ::地图属性 - C +标准要求?
- 2. C++标准要求C连接函数是否为“noexcept”?
- 3. 是否使用C++标准所要求的allocator :: rebind?
- 4. 标准是否要求EOF为负值?
- 5. alloca是C++标准的一部分吗?
- 6. 是C标准的TRUE/FALSE部分吗?
- 7. Python标准库真的是标准吗?
- 8. u_char是标准吗?
- 9. cmake:不需要时添加C++标准
- 10. 可以在标准C中处理中断吗?
- 11. Python不是标准化语言吗?
- 12. 不必要的标准化
- 13. size_t仅在C++标准或C标准中吗?
- 14. IEC 61968标准是不是“标准化”?
- 15. MS C编译器要求变量的声明位于函数的开头。这是由标准支持吗?
- 16. WPF是ECMA标准库吗?
- 17. IBM JRE是标准VM吗?
- 18. ConstraintLayout是新标准吗?
- 19. 它是标准的C++
- 20. C#进程中断大标准输入
- 21. 示例要求标准和设计标准
- 22. 这是SOAP请求的标准或通用编码吗?
- 23. 刮网站的要求/第二标准是什么?
- 24. 多标准要求对短期MySQL表
- 25. 在这里可以使用标准断言而不是模拟期望吗?
- 26. 是JDK断言需要使用的吗?
- 27. 虽然不批准真正的要求
- 28. 550 5.7.1此消息不符合要求的标准
- 29. 选择符合标准且不符合要求的行
- 30. 标准C中需要文字后缀吗?
标题似乎并不符合问题,常量折叠是一种优化技术,绝对不是标准所要求的,但是允许的。 “1 + 1”是一个常量表达式,它的属性在标准中定义。看起来你的问题是关于常量表达式。 –