活动介绍

C语言标准详解:从词法到类型转换

立即解锁
发布时间: 2025-08-22 00:24:53 阅读量: 11 订阅数: 16
PDF

C语言编程基础与实践

# C语言标准详解:从词法到类型转换 ## 1. 引言 本手册解读的是 1988 年 10 月 31 日提交给美国国家标准学会(ANSI)的草案所规定的 C 语言,该草案旨在批准成为 “信息系统 - 编程语言 C 的美国标准,X3.159 - 1989”。此手册是对拟议标准的阐释,虽尽力成为可靠的语言指南,但并非标准本身。 ## 2. 词法约定 ### 2.1 程序翻译阶段 程序由存储在文件中的一个或多个翻译单元组成,其翻译过程分为多个阶段。初始阶段进行低级词法转换,执行以 `#` 字符开头的行引入的指令,并进行宏定义和展开。预处理完成后,程序被简化为一系列标记。 ### 2.2 标记 标记分为六类:标识符、关键字、常量、字符串字面量、运算符和其他分隔符。空白、水平和垂直制表符、换行符、换页符和注释(统称 “空白字符”)除用于分隔标记外,会被忽略。部分情况下,需要空白字符来分隔相邻的标识符、关键字和常量。若输入流已分隔到某个字符,下一个标记是能构成标记的最长字符串。 ### 2.3 注释 注释以 `/*` 开头,以 `*/` 结尾,不允许嵌套,且不会出现在字符串或字符字面量中。 ### 2.4 标识符 标识符是字母和数字的序列,首字符必须是字母,下划线 `_` 视为字母,大小写字母不同。标识符长度不限,对于内部标识符,至少前 31 个字符有意义,某些实现可能会考虑更多字符。具有外部链接的标识符限制更多,实现可能仅使前六个字符有意义,且可能忽略大小写区别。 ### 2.5 关键字 以下标识符被保留用作关键字,不能另作他用: ```plaintext auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while ``` 部分实现还会保留 `fortran` 和 `asm` 这两个词。`const`、`signed` 和 `volatile` 是 ANSI 标准新增的关键字;`enum` 和 `void` 自第一版起新增,但已广泛使用;`entry` 以前被保留但从未使用,现在不再保留。 ### 2.6 常量 常量有多种类型,每种都有数据类型,主要包括: - 整数常量 - 字符常量 - 浮点常量 - 枚举常量 #### 2.6.1 整数常量 由数字序列组成的整数常量,若以 `0` 开头则为八进制,否则为十进制。八进制常量不包含数字 `8` 或 `9`。以 `0x` 或 `0X` 开头的数字序列为十六进制整数。整数常量可后缀 `u` 或 `U` 表示无符号,后缀 `l` 或 `L` 表示长整型。其类型取决于形式、值和后缀,具体规则如下表所示: | 后缀情况 | 类型 | | ---- | ---- | | 无后缀且为十进制 | int, long int, unsigned long int(按顺序能表示其值的第一个类型) | | 无后缀,八进制或十六进制 | int, unsigned int, long int, unsigned long int(按顺序能表示其值的第一个类型) | | 后缀为 u 或 U | unsigned int, unsigned long int | | 后缀为 l 或 L | long int, unsigned long int | | 后缀为 UL | unsigned long | #### 2.6.2 字符常量 字符常量是用单引号括起来的一个或多个字符序列,如 `'x'`。单字符常量的值是该字符在机器字符集中执行时的数值。多字符常量的值由实现定义。字符常量不包含 `'` 字符或换行符,可使用以下转义序列来表示它们及其他特定字符: | 含义 | 转义序列 | | ---- | ---- | | 换行符 | `\n` | | 反斜杠 | `\\` | | 水平制表符 | `\t` | | 问号 | `\?` | | 垂直制表符 | `\v` | | 单引号 | `\'` | | 退格符 | `\b` | | 双引号 | `\"` | | 回车符 | `\r` | | 八进制数 | `\ooo` | | 换页符 | `\f` | | 十六进制数 | `\xhh` | | 响铃符 | `\a` | 部分实现中,存在无法用 `char` 类型表示的扩展字符集,此类常量以 `L` 开头,如 `L'x'`,称为宽字符常量,类型为 `wchar_t`。 #### 2.6.3 浮点常量 浮点常量由整数部分、小数部分、分数部分、`e` 或 `E`、可选带符号的整数指数和可选类型后缀(`f`、`F`、`l` 或 `L`)组成。整数和分数部分均为数字序列,整数部分或分数部分(不能两者都)可缺失,小数点或 `e` 及指数(不能两者都)可缺失。类型由后缀决定,`F` 或 `f` 表示 `float`,`L` 或 `l` 表示 `long double`,否则为 `double`。 #### 2.6.4 枚举常量 声明为枚举器的标识符是 `int` 类型的常量。 ### 2.7 字符串字面量 字符串字面量,也称为字符串常量,是用双引号括起来的字符序列,如 ` "..."`。字符串类型为 “字符数组”,存储类为静态,用给定字符初始化。相同字符串字面量是否不同由实现定义,尝试修改字符串字面量的程序行为未定义。相邻字符串字面量会连接成一个字符串,连接后会在字符串末尾追加空字节 `\0`。字符串字面量不包含换行符或双引号字符,可使用与字符常量相同的转义序列来表示它们。扩展字符集中的字符串字面量以 `L` 开头,如 `L "..."`,宽字符字符串字面量类型为 “`wchar_t` 数组”,普通和宽字符字符串字面量的连接未定义。 ## 3. 语法表示法 本手册使用的语法表示法中,语法类别用斜体表示,字面单词和字符用打字机字体表示。替代类别通常分行列出,少数情况下,一组较窄的替代项会在一行列出,用 “one of” 标记。可选的终结符或非终结符符号带有下标 “opt”,例如 `{ expressionopt }` 表示一个用花括号括起来的可选表达式。 ## 4. 标识符的含义 标识符或名称可指代多种事物,如函数、结构体、联合体和枚举的标签、结构体或联合体的成员、枚举常量、`typedef` 名称和对象。对象(有时称为变量)是存储位置,其解释取决于两个主要属性:存储类和类型。存储类决定与该对象关联的存储的生命周期,类型决定该对象中值的含义。名称还有作用域和链接性,作用域是程序中该名称已知的区域,链接性决定不同作用域中相同名称是否指代同一对象或函数。 ### 4.1 存储类 存储类分为两种:自动和静态。多个关键字结合对象声明的上下文来指定其存储类。 - **自动对象**:局部于一个块,块退出时会被丢弃。块内声明的对象,若未指定存储类或使用 `auto` 说明符,则为自动对象。声明为 `register` 的对象也是自动对象,若可能,会存储在机器的快速寄存器中。 - **静态对象**:可以局部于一个块或在所有块外部,但无论哪种情况,在函数和块退出和重新进入时都会保留其值。在块内(包括提供函数代码的块),使用 `static` 关键字声明静态对象。在所有块外部、与函数定义处于同一级别的对象始终是静态的。使用 `static` 关键字可使其局部于特定翻译单元,具有内部链接;省略显式存储类或使用 `extern` 关键字可使其在整个程序中全局可用,具有外部链接。 ### 4.2 基本类型 存在几种基本类型,标准头文件 `<limits.h>` 定义了每种类型在本地实现中的最大和最小值。 - **字符类型**:声明为字符(`char`)的对象足以存储执行字符集中的任何成员。若将该集中的真实字符存储在 `char` 对象中,其值等同于该字符的整数代码,且为非负。其他量也可存储在 `char` 变量中,但可用的值范围,尤其是值是否有符号,由实现决定。无符号字符(`unsigned char`)占用与普通字符相同的空间,但始终为非负;显式有符号字符(`signed char`)同样占用与普通字符相同的空间。 - **整数类型**:除字符类型外,还有短整型(`short int`)、整型(`int`)和长整型(`long int`)三种整数大小可选。普通 `int` 对象具有主机机器架构建议的自然大小,其他大小用于满足特殊需求。较长的整数至少提供与较短整数相同的存储空间,但实现可能使普通整数等同于短整数或长整数。除非另有指定,`int` 类型表示有符号值。使用 `unsigned
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

SW_孙维

开发技术专家
知名科技公司工程师,开发技术领域拥有丰富的工作经验和专业知识。曾负责设计和开发多个复杂的软件系统,涉及到大规模数据处理、分布式系统和高性能计算等方面。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看

最新推荐

从近似程度推导近似秩下界

# 从近似程度推导近似秩下界 ## 1. 近似秩下界与通信应用 ### 1.1 近似秩下界推导 通过一系列公式推导得出近似秩的下界。相关公式如下: - (10.34) - (10.37) 进行了不等式推导,其中 (10.35) 成立是因为对于所有 \(x,y \in \{ -1,1\}^{3n}\),有 \(R_{xy} \cdot (M_{\psi})_{x,y} > 0\);(10.36) 成立是由于 \(\psi\) 的平滑性,即对于所有 \(x,y \in \{ -1,1\}^{3n}\),\(|\psi(x, y)| > 2^d \cdot 2^{-6n}\);(10.37) 由

使用GameKit创建多人游戏

### 利用 GameKit 创建多人游戏 #### 1. 引言 在为游戏添加了 Game Center 的一些基本功能后,现在可以将游戏功能扩展到支持通过 Game Center 进行在线多人游戏。在线多人游戏可以让玩家与真实的人对战,增加游戏的受欢迎程度,同时也带来更多乐趣。Game Center 中有两种类型的多人游戏:实时游戏和回合制游戏,本文将重点介绍自动匹配的回合制游戏。 #### 2. 请求回合制匹配 在玩家开始或加入多人游戏之前,需要先发出请求。可以使用 `GKTurnBasedMatchmakerViewController` 类及其对应的 `GKTurnBasedMat

量子物理相关资源与概念解析

# 量子物理相关资源与概念解析 ## 1. 参考书籍 在量子物理的学习与研究中,有许多经典的参考书籍,以下是部分书籍的介绍: |序号|作者|书名|出版信息|ISBN| | ---- | ---- | ---- | ---- | ---- | |[1]| M. Abramowitz 和 I.A. Stegun| Handbook of Mathematical Functions| Dover, New York, 1972年第10次印刷| 0 - 486 - 61272 - 4| |[2]| D. Bouwmeester, A.K. Ekert, 和 A. Zeilinger| The Ph

区块链集成供应链与医疗数据管理系统的优化研究

# 区块链集成供应链与医疗数据管理系统的优化研究 ## 1. 区块链集成供应链的优化工作 在供应链管理领域,区块链技术的集成带来了诸多优化方案。以下是近期相关优化工作的总结: | 应用 | 技术 | | --- | --- | | 数据清理过程 | 基于新交叉点更新的鲸鱼算法(WNU) | | 食品供应链 | 深度学习网络(长短期记忆网络,LSTM) | | 食品供应链溯源系统 | 循环神经网络和遗传算法 | | 多级供应链生产分配(碳税政策下) | 混合整数非线性规划和分布式账本区块链方法 | | 区块链安全供应链网络的路线优化 | 遗传算法 | | 药品供应链 | 深度学习 | 这些技

黎曼zeta函数与高斯乘性混沌

### 黎曼zeta函数与高斯乘性混沌 在数学领域中,黎曼zeta函数和高斯乘性混沌是两个重要的研究对象,它们之间存在着紧密的联系。下面我们将深入探讨相关内容。 #### 1. 对数相关高斯场 在研究中,我们发现协方差函数具有平移不变性,并且在对角线上存在对数奇异性。这种具有对数奇异性的随机广义函数在高斯过程的研究中被广泛关注,被称为高斯对数相关场。 有几个方面的证据表明临界线上$\log(\zeta)$的平移具有对数相关的统计性质: - 理论启发:从蒙哥马利 - 基廷 - 斯奈思的观点来看,在合适的尺度上,zeta函数可以建模为大型随机矩阵的特征多项式。 - 实际研究结果:布尔加德、布

探索人体与科技融合的前沿:从可穿戴设备到脑机接口

# 探索人体与科技融合的前沿:从可穿戴设备到脑机接口 ## 1. 耳部交互技术:EarPut的创新与潜力 在移动交互领域,减少界面的视觉需求,实现无视觉交互是一大挑战。EarPut便是应对这一挑战的创新成果,它支持单手和无视觉的移动交互。通过触摸耳部表面、拉扯耳垂、在耳部上下滑动手指或捂住耳朵等动作,就能实现不同的交互功能,例如通过拉扯耳垂实现开关命令,上下滑动耳朵调节音量,捂住耳朵实现静音。 EarPut的应用场景广泛,可作为移动设备的遥控器(特别是在播放音乐时)、控制家用电器(如电视或光源)以及用于移动游戏。不过,目前EarPut仍处于研究和原型阶段,尚未有商业化产品推出。 除了Ea

由于提供的内容仅为“以下”,没有具体的英文内容可供翻译和缩写创作博客,请你提供第38章的英文具体内容,以便我按照要求完成博客创作。

由于提供的内容仅为“以下”,没有具体的英文内容可供翻译和缩写创作博客,请你提供第38章的英文具体内容,以便我按照要求完成博客创作。 请你提供第38章的英文具体内容,同时给出上半部分的具体内容(目前仅为告知无具体英文内容需提供的提示),这样我才能按照要求输出下半部分。

利用GeoGebra增强现实技术学习抛物面知识

### GeoGebra AR在数学学习中的应用与效果分析 #### 1. 符号学视角下的学生学习情况 在初步任务结束后的集体讨论中,学生们面临着一项挑战:在不使用任何动态几何软件,仅依靠纸和笔的情况下,将一些等高线和方程与对应的抛物面联系起来。从学生S1的发言“在第一个练习的图形表示中,我们做得非常粗略,即使现在,我们仍然不确定我们给出的答案……”可以看出,不借助GeoGebra AR或GeoGebra 3D,识别抛物面的特征对学生来说更为复杂。 而当提及GeoGebra时,学生S1表示“使用GeoGebra,你可以旋转图像,这很有帮助”。学生S3也指出“从上方看,抛物面与平面的切割已经

人工智能与混合现实技术在灾害预防中的应用与挑战

### 人工智能与混合现实在灾害预防中的应用 #### 1. 技术应用与可持续发展目标 在当今科技飞速发展的时代,人工智能(AI)和混合现实(如VR/AR)技术正逐渐展现出巨大的潜力。实施这些技术的应用,有望助力实现可持续发展目标11。该目标要求,依据2015 - 2030年仙台减少灾害风险框架(SFDRR),增加“采用并实施综合政策和计划,以实现包容、资源高效利用、缓解和适应气候变化、增强抗灾能力的城市和人类住区数量”,并在各级层面制定和实施全面的灾害风险管理。 这意味着,通过AI和VR/AR技术的应用,可以更好地规划城市和人类住区,提高资源利用效率,应对气候变化带来的挑战,增强对灾害的

元宇宙与AR/VR在特殊教育中的应用及安全隐私问题

### 元宇宙与AR/VR在特殊教育中的应用及安全隐私问题 #### 元宇宙在特殊教育中的应用与挑战 元宇宙平台在特殊教育发展中具有独特的特性,旨在为残疾学生提供可定制、沉浸式、易获取且个性化的学习和发展体验,从而改善他们的学习成果。然而,在实际应用中,元宇宙技术面临着诸多挑战。 一方面,要确保基于元宇宙的技术在设计和实施过程中能够促进所有学生的公平和包容,避免加剧现有的不平等现象和强化学习发展中的偏见。另一方面,大规模实施基于元宇宙的特殊教育虚拟体验解决方案成本高昂且安全性较差。学校和教育机构需要采购新的基础设施、软件及VR设备,还会产生培训、维护和支持等持续成本。 解决这些关键技术挑