ISO/IEC 9899:2011 条款6.5.1——基本表达式
6.5.1 基本表达式
语法
1、primary-expression:
identifier
constant
string-literal
( expression )
generic-selection
语义
2、一个标识符是一个基本表达式,提供为,它作为指派一个对象(在这种情况下,它是一个左值)或一个函数(在这种情况下,它是一个函数指派符)而被声明。[注:从而,一个未声明的标识符是对此语法的违反。][译者注:比如:
int a = ;
a; // 这是一个基本表达式
]
3、一个常量是一个基本表达式。其类型依赖于其形式和值,在6.4.4中详细描述。
4、一个字符串字面量是一个基本表达式。它是具有在6.4.5中所描述的类型的一个左值。[译者注:即,一个字符串字面量具有地址。]
5、一个括号表达式是一个基本表达式。其类型和值与相应没用括号的表达式的一样。它是一个左值、一个函数指派符,或是一个void表达式,如果没用括号的表达式分别是一个左值、一个函数指派符,或是一个void表达式的话。
6、一个泛型选择是一个基本表达式。其类型与值依赖于被选中的泛型关联,在以下子条款中详细描述。
6.5.1.1 泛型选择
语法
1、generic-selection:
_Generic ( assignment-expression , generic-assoc-list )
generic-assoc-list:
generic-association
generic-assoc-list , generic-association
generic-association:
type-name : assignment-expression
default : assignment-expression
[译者注:其中,表示一个assignment-expression赋值表达式,在6.5.16中介绍。然而,这里的assignment-expression也可以是一个基本表达式,比如一个标识符或常量。]
限制
2、一个泛型选择应该最多含有一个default泛型关联。在一个泛型联合中的类型名应该指定一个完整的对象,而不是一个可变修改的类型。在同一泛型选择中的任意两个泛型关联不应该指定相兼容的类型。一个泛型选择的控制表达式应该具有与在其泛型关联列表中命名的最多一个类型相兼容的类型。如果一个泛型选择不具有default泛型关联,那么其控制表达式应该恰好具有一个在其泛型关联列表中命名的一个类型相兼容的类型。[译者注:这里的控制表达式即圆括号中的assignment-expression。]
3、一个泛型选择的控制表达式不被计算。如果一个泛型选择具有一个泛型关联,其类型名与控制表达式的类型相兼容,那么该泛型选择的结果表达式就是那个泛型关联中的表达式。否则,该泛型选择的结果表达式为default选择关联中的表达式。然后,该泛型选择中的所有其它泛型关联都不会被计算。[译者注:这里所谓的表达式不会被计算,并不意味着编译器不做语法判断,只是说表达式不会被执行,比如以下代码:
_Generic(, int: , float:0.34 & 1.25); // 编译器错误
_Generic(, int: , float:0.34 * 1.25); // OK,0.34 * 1.25不会被执行
上面一行代码中,表达式0.34 & 1.25尽管不会被执行,也不会生成相应的目标代码,但是它并不符合按位与操作符的语法(按位与操作符的操作数不允许是浮点数),因此在编译时仍然会报错。而第二行代码没有问题,同时0.34 * 1.25这个表达式相关的目标代码也不会被生成。
]
4、一个泛型选择的类型和值对于其结果表达式是一样的。它可以是一个左值、一个函数指派符,或是一个void表达式,如果其结果表达式分别为一个左值、一个函数指派符,或是一个void表达式。
5、例 cbrt类型泛型宏可以如下实现:
#define cbrt(X) _Generic((X), \
long double: cbrtl, \
default: cbrt, \
float: cbrtf, \
) (X)
[译者注:上述由泛型表达式所返回的结果表达式为cbrtl、cbrt或cbrtf函数指派符,它们被自动转换为函数指针。]
ISO/IEC 9899:2011 条款6.5.1——基本表达式的更多相关文章
- 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 条款5——5.1.2 执行环境
5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...
- ISO/IEC 9899:2011 条款4——标准顺从
4. 标准顺从 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为 ...
- ISO/IEC 9899:2011 条款6——语言
6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...
- ISO/IEC 9899:2011 条款6.3——转换
6.3 转换 1.有些操作符将操作数的值自动地从一种类型转换为另一种.本子条款指定了从这么一个隐式转换所要求的结果,以及从一个投射操作(一个显式转换)所要求的结果.在6.3.1.8中所列出的信息概括了 ...
- ISO/IEC 9899:2011 条款6.5——表达式
6.5 表达式 1.一个表达式是操作符与操作数的一个序列,这些操作符与操作数指定了一个值的计算,或指派一个对象或一个函数,或是生成副作用,或执行上述操作的组合.对一个操作符的操作数的值计算顺序排在对该 ...
随机推荐
- 容错(Fault-tolerance)
Spark Streaming的容错包括了三个地方的容错: 1.Executor失败容错:Executor的失败会重新启动一个新的Executor,这个是Spark自身的特性.如果Receiver所在 ...
- HDFS集群中DataNode的上线与下线
在HDFS集群的运维过程中,肯定会遇到DataNode的新增和删除,即上线与下线.这篇文章就详细讲解下DataNode的上线和下线的过程. 背景 在我们的微职位视频课程中,我们已经安装了3个节点的HD ...
- CentOS7 部署 ElasticSearch7.0.1 集群
环境 主机名 IP 操作系统 ES 版本 test1 192.168.1.2 CentOS7.5 7.0.1 test2 192.168.1.3 CentOS7.5 7.0.1 test3 192.1 ...
- 使用unsafe.Pointer将结构体转为[]byte
package main import ( "fmt" "unsafe" ) type TestStructTobytes struct { data int6 ...
- sublime test 3 配置安装fortran开发环境
1.ST3下安装包管理工具Package Control https://jingyan.baidu.com/article/3c343ff7dca2b10d3779633b.html ST主界面下c ...
- 数据库基准测试标准 TPC-C or TPC-H or TPC-DS
针对数据库不同的使用场景TPC组织发布了多项测试标准.其中被业界广泛接受和使用的有TPC-C .TPC-H和TPC-DS. TPC-C: Approved in July of 1992, TPC B ...
- PHP 鸟哥:我也曾经是“不适合”编程的人
网名:雪候鸟,大家尊称鸟哥,惠新宸 @Laruence, 是国内最有影响力的 PHP 技术专家,PHP 开发组核心成员,PECL 开发者,Zend 公司外聘顾问.他曾供职于雅虎,百度,现在新浪微博任平 ...
- codevs6003一次做对算我输
6003 一次做对算我输 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 大师 Master 题目描述 Description 更新数据了!!!!!!!更新数据了!!!!!! ...
- 数据科学速查手册(包括机器学习,概率,微积分,线性代数,python,pandas,numpy,数据可视化,SQL,大数据等方向)
介绍:https://redstonewill.com/2372/ 项目网址:https://github.com/FavioVazquez/ds-cheatsheets
- (28)打鸡儿教你Vue.js
单件商品金额计算和单选全选功能 new Vue({ el: '#app', data: { totalMoney: 0, productList: [] }, filters: { formatMon ...