ISO/IEC 9899:2011 条款6.5——表达式
6.5 表达式
1、一个表达式是操作符与操作数的一个序列,这些操作符与操作数指定了一个值的计算,或指派一个对象或一个函数,或是生成副作用,或执行上述操作的组合。对一个操作符的操作数的值计算顺序排在对该操作符的结果的值计算之前。[译者注:比如
int a = ( + ) * ( - );
对于上述表达式,就对于当中的 * 操作符而言,先计算乘法操作符左右两边的操作数的计算,最后再计算乘法操作结果。
]
2、如果在一个标量对象上的副作用相对于同一标量对象上的另一个不同副作用或是使用同一标量对象的值的一个值计算,没有为其编排前后次序,那么行为是未定义的。如果一个表达式有多个可允许的子表达式的次序,那么行为是未定义的,如果这么一个未安排次序的副作用以任一次序发生的话。[注:以下代码描述了未定义的语句表达式:
i = ++i + ;
a[i++] = i;
以下是允许的:
i = i + ;
a[i] = i;
]
3、操作符与操作数的组合通过语法来指定。[注:语法指定了一个表达式计算中操作符的优先级,这与本子条款的主要子条款的次序相同,最高优先级先被介绍。从而,比如,允许作为双目操作符 + 的表达式(6.5.6)是定义在6.5.1到6.5.6中的那些表达式。]例外是投射表达式(6.5.4)作为单目操作符(6.5.3)的操作数,以及跟在任一下列操作符对之后的其中间所包含的一个操作数:用作组合的小括号 ( ) (6.5.1),下标中括号 [ ] (6.5.2.1),函数调用小括号 ( ) (6.5.2.2),以及条件操作符 ? : (6.5.15)。在每个主条款中,操作符具有相同的优先级。左或右结合性在每个子条款中被指明,通过用于在里面所讨论的表达式的语法。]除了稍后指定的,副作用与子表达式的值计算不被按次序编排的情况。[注:在一个表达式中,该表达式在一个程序的执行期间被执行多次,并且没有被安排前后次序,对其子表达式的计算也具有不确定的前后次序,那么该表达式不需要在不同计算中执行相一致。]
4、某些操作符(单目操作符 ~ ,以及双目操作符 << , >>,& , ^ ,以及 | ,统称为按位操作符)要求具有整数类型的操作数。这些操作符依赖整数的内部表示来产生值,并且具有对于带符号类型以实现定义的及未定义的方面。[译者注:尤其对于 >> 和 << 作用在带符号整数类型上,不同处理器架构具有不同行为。]
5、如果在一个表达式的计算期间有一个意外情况发生(即,如果结果不是数学上定义的,也不是在其类型可表示的值范围内的),那么行为是未定义的。
6、一个对象的有效类型,用于访问其存储的值,是该对象所声明的类型,如果存在的话。[注:动态分配的对象不具有被声明的类型。]如果一个值被存储在不具有声明类型的一个对象中,通过某个不是一个字符类型的左值,那么该左值的类型变为该对象的有效类型,用于访问以及用于后续访问不修改所存储的值。如果一个值通过memcpy或memmove被拷贝到一个不具有声明类型的对象中,或是作为一个字符类型的数组进行拷贝,那么用于访问以及后续不修改值的访问的被修改对象的有效类型是值所被拷贝的源对象的有效类型,如果源对象有有效类型的话。对于所有其它对一个不具有声明类型的对象的访问,该对象的有效类型即为用于访问的左值的类型。
7、一个对象应该让其所存储的值仅通过一个左值表达式来访问,该左值表达式具有以下类型之一:[注:这个列表的目的是用于指定那些在一个对象可以或不可以被别名化的情况。]
——与该对象的有效类型相兼容的一个类型,
——与该对象的有效类型相兼容的一个类型的一个限定版本,
——相应于该对象有效类型的一个带符号或无符号类型,
——相应于该对象的有效类型的一个限定版本的一个带符号或无符号类型
——一个聚合或联合类型,在其成员中包含上述所提到的类型之一(递归地包括一个子集的或所包含的联合体的一个成员),或
——一个字符类型。
8、一个浮点表达式可以被抽象(contracted),也就是说,对一个浮点数的计算就好比是一单次操作,而忽略由源代码与表达式计算方法所隐含的舍入错误。[注:在被抽象的表达式中的中间操作被计算,就好到比无穷范围和精度,当最终操作被舍入到由表达式计算方法所确定的格式时。一个抽象的表达式也可能忽略对浮点异常的引发。]在<math.h>中的FP_CONTRACT编译指示提供了一种方法来禁用抽象的表达式。否则,表达式是否被抽象或如何被抽象是由实现定义的。[注:此许可目的专门为允许实现来利用可结合多个C操作的快速机器指令。由于抽象潜在地暗中破坏可预测性,并且甚至可能降低所包含表达式的精度,所以对它们的使用需要被良好定义,并且被清晰地文档化。]
6.5.11 按位异或操作符
6.5.12 按位或操作符
6.5.13 逻辑与操作符
6.5.14 逻辑或操作符
ISO/IEC 9899:2011 条款6.5——表达式的更多相关文章
- ISO/IEC 9899:2011 条款3——术语、定义与符号
3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...
- ISO/IEC 9899:2011 条款5——5.2.1 字符集
5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...
- ISO/IEC 9899:2011 条款6.4.2——标识符
6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier identifier-nondigit identifie ...
- ISO/IEC 9899:2011 条款6.4.3——通用字符名
6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...
- ISO/IEC 9899:2011 条款6.5.1——基本表达式
6.5.1 基本表达式 语法 1.primary-expression: identifier constant string-literal ( expression ) generic ...
- ISO/IEC 9899:2011 条款6.6——常量表达式
6.6 常量表达式 语法 1.constant-expression conditional-expression 描述 2.一个常量表达式可以在翻译期间被计算,而不是在运行时,并且根据情况可以被用于 ...
- ISO/IEC 9899:2011 条款6.8.3——表达式与空语句
6.8.3 表达式与空语句 语法 1.expression-statement: expressionopt ; 语义 2.在一条表达式语句中的表达式被计算为一个void表达式作为其副作用.[注 ...
- ISO/IEC 9899:2011 条款5——5.1.2 执行环境
5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...
- ISO/IEC 9899:2011 条款6——语言
6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...
随机推荐
- 如何设置CentOS 7获取动态IP和静态IP
自动获取动态IP地址 1.输入“ip addr”并按回车键确定,发现无法获取IP(CentOS 7默认没有ifconfig命令),记录下网卡名称(本例中为ens33). 2.输入“cd /etc/sy ...
- samba 问题解决
问题1:使用cifscreds 命令提示 You already have stashed credentials for bash-4.2$ cifscreds add 172.24.8.11 Yo ...
- Java精通并发-synchronized关键字原理详解
关于synchronized关键字原理其实在当时JVM的学习[https://www.cnblogs.com/webor2006/p/9595300.html]中已经剖析过了,这里从研究并发专题的角度 ...
- 非正常卸载Chrome浏览器导致无法重新安装
昨晚在使用selenium的时候,Chrome浏览器和Chromedriver.exe不兼容,前几天使用的时候都没问题,查看浏览器版本后发现浏览器已经自动升级为67版本(我之前安装的是61版本). 于 ...
- Maven01-maven打包Web项目成war文件-tomcat脱机运行启动项目
1 执行package 2 复制 3 catalina run ,打开cmd窗口 4 输入网址 5注意要配置tomcat的 Application context为工程名字
- SVM:从数学上分析为什么优化cost function会产生大距离(margin)分类器
向量内积 uTv = vTu为两个二维向量的内积,它等于p*||u||(其中p为向量v在向量u上的投影长度,是有+/-之分的,||u||为向量u的长度也称为范数),它是一个实数(是一个标量). 如上图 ...
- Redis 缓存失效机制
Redis缓存失效的故事要从EXPIRE这个命令说起,EXPIRE允许用户为某个key指定超时时间,当超过这个时间之后key对应的值会被清除,这篇文章主要在分析Redis源码的基础上站在Redis设计 ...
- Django示例演示--?
引用自:https://blog.csdn.net/weixin_42950386/article/details/83143293 定义模型类 模型类被定义在"应用/models.py&q ...
- [JSOI2018]战争
题目描述 九条可怜是一个热爱读书的女孩子. 在她最近正在读的一本小说中,描述了两个敌对部落之间的故事.第一个部落有 nnn 个人,第二个部落有 mmm 个人,每一个人的位置可以抽象成二维平面上坐标为 ...
- (转载) 搭建非域AlwaysOn win2016+SQL2016
非域搭建Alwayson只是省去搭建域控那一部分,其他大同小异 条件: 操作系统:windows server 2016 数据库:SQL Server 2016 SSMS版本:17.3 节点1:HDD ...