You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何C标准n3301中常量表达式要求未区分是否被求值?

关于C标准常量表达式与短路求值的疑问

n3301文档相关条款

6.6节「常量表达式」第4款

每个常量表达式应求值为其类型可表示范围内的常量。

6.5.15节「逻辑或运算符」第4款

若第一个操作数不等于0,则不计算第二个操作数。

核心疑问

为何第一条要求未关联常量表达式是否被求值(或不被求值)的规则?
换句话说:为何标准表述为「每个常量表达式应求值为...」而非「每个被求值的常量表达式应求值为...」?这是否属于疏漏?

提问背景

部分观点认为「每个常量表达式应求值为...」的优先级高于「不计算第二个操作数」的规则。

n3301文档存在脚注119:

  1. 因此,在如下初始化中:
static int i = 2 || 1 / 0;

该表达式是值为1的有效整数常量表达式。

需注意:在ISO标准中,注释均不具备规范性。


内容的提问来源于stack exchange,提问作者pmor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:07:09