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.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...
随机推荐
- openGL起飞篇
我的技术路线:glfw+glad(有了glfw,什么glew,freeglut都不要了) GLFW:直接下载,然后新建vs项目,在<VC++>的<包含目录>添加include路 ...
- Vuex基础 -01 -实现简易计数器 -支持 加数/ 减数/ 奇数再加/ 异步加法(setTimeout 1000ms) -单组件演示语法
Vuex 的结构图 工程组织 Vuex的核心管理程序 store.js /* vuex的核心管理程序 */ import Vue from 'vue' import Vuex from 'vuex' ...
- BOM常用属性与方法
BOMBrowser Object Modelwindow浏览器窗口window方法locationlocation常用属性screen显示器屏幕screen常用属性navigator浏览器软件nav ...
- Python语言程序设计(3)--实例2-python蟒蛇绘制-turtle库
1. 2. 3.了解turtle库 Turtle,也叫海龟渲染器,使用Turtle库画图也叫海龟作图.Turtle库是Python语言中一个很流行的绘制图像的函数库.海龟渲染器,和各种三维软件都有着良 ...
- POJ3709 K-Anonymous Sequence
题意 Language:Default K-Anonymous Sequence Time Limit: 4000MS Memory Limit: 65536K Total Submissions: ...
- IntelliJ IDEA:给 web 应用提供 JSTL 支持
最近在看<Head First Servlet JSP>学习JSP,看到JSTL一章,为了添加JSTL支持折腾了好久. 网上的教程五花八门,而且多数比较旧. 我尝试了各种方法都没有成功,很 ...
- CS229开源项目
斯坦福大学CS 229机器学习备忘单: https://github.com/kaobeixingfu/stanford-cs-229-machine-learning CS229机器学习算法的Pyt ...
- CODE FESTIVAL 2016 Final 题解
传送门 \(A\) 什么玩意儿-- const char c[]={"snuke"}; char s[15];int n,m; int main(){ scanf("%d ...
- flutter 省市区选择器 city_pickers 的简单实用
Github地址:https://github.com/hanxu317317/city_pickers packages地址: https://pub.flutter-io.cn/packages/ ...
- golang-os文件操作
golang-os文件操作 package main import ( "fmt" "os" ) //func main() { // f,err :=os.C ...