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.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ... 
随机推荐
- Luogu P1970 花匠
			Luogu P1970 花匠 本质上就是找最长的波浪序列. 因为考虑到第一个必选,所以可以让$lst=h[1]$. 此外,注意到$n=1$是要特判,其他情况下显然$ans\geq 2$,所以把$dir ... 
- linux下分析java程序占用CPU、内存过高
			一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ... 
- awk命令笔记
			awk是啥? awk(奥克)是linux中一个强大的分析工具,linux面试必考 [root@rainbol ~]# awk Usage: awk [POSIX or GNU style option ... 
- Mybatis控制台打印SQL语句的两种方式
			问题描述在使用mybatis进行开发的时候,由于可以动态拼接sql,这样大大方便了我们.但是也有一定的问题,当我们动态sql拼接的块很多的时候,我们要想从*mapper.xml中直接找出完整的sql就 ... 
- 行为型模式(八) 职责链模式(Chain of Responsibility)
			一.动机(Motivate) 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合.如何使请求的发送者不需要指定 ... 
- IntelliJ IDEA:给 web 应用提供 JSTL 支持
			最近在看<Head First Servlet JSP>学习JSP,看到JSTL一章,为了添加JSTL支持折腾了好久. 网上的教程五花八门,而且多数比较旧. 我尝试了各种方法都没有成功,很 ... 
- 【CSP-S 2019】【洛谷P5666】树的重心【主席树】【树状数组】【dfs】
			题目: 题目链接:https://www.luogu.com.cn/problem/P5666 小简单正在学习离散数学,今天的内容是图论基础,在课上他做了如下两条笔记: 一个大小为 \(n\) 的树由 ... 
- FailOver的机制
			package util import ( "fmt" "hash/crc32" "math/rand" "sort" ... 
- Error Codes Messages查找工具介绍
			当我们通过各种手段获取到一个Windows错误码后,如何获取对应的错误消息呢?有两种方法:一是用编程的手段(FormatMessage):其二是用现成的工具.第一种方法一般在我们编码的时候有用,而更多 ... 
- 本地存储API
			一.定义 随着互联网的快速发展,基于网页的应用越来越普遍,同时也变得越来越复杂,为了满足各种各样的需求,会经常在本地存储大量的数据,HTML5规范提出了相关解决方案 本地存储设置读取方便,容量较大,s ... 
