6.10.2 源文件包含

约束

1、一个#include指示符应该指定一个能被实现处理的头文件或源文件。

语义

2、一个预处理指示符如下形式

#    include    <h-char-sequence>    new-line

搜索一个由实现定义的地方的序列,该地方用<和>分隔符之间所指定的序列唯一标识,并使得该指示符用头文件整个内容进行替换。这些地方如何指定或头文件标识符如何指定是由实现定义的。

3、一个预处理指示符的如下形式

#    include    "q-char-sequence"    new-line

引发由"分隔符之间所指定的序列标识的整个源文件的内容来替换该指示符。命名源文件以一个实现定义的方式进行搜索。如果该搜索不被支持,或者该搜索失败,那么该指示符正如它用以下指示符所读到内容重新处理

#    include    <h-char-sequence>    new-line

4、一个以下形式的预处理指示符

#    include    pp-tokens    new-line

(不匹配之前两种形式的任何一个)是允许的。在指示符中include之后的预处理符记正如在正常文本中的一样。(当前被定义为一个宏名的每个标识符用其预处理符记替换列表进行替换)在所有替换之后的指示符结果应该匹配先前两种形式之一。[注:注意,邻近字符串字面量不被拼接为一单个字符串字面量(见5.1.1.2中的翻译阶段);从而,结果为两个字符串字面量的一个扩展是一个无效的指示符。]在<和>分隔符之间或在一对"之间的一序列预处理符记被结合为一单个头文件名预处理符记的方法,是实现定义的。

5、实现应该提供对由一个或多个非数字或数字,后面跟着一个点(.)以及一单个非数字所组成序列的唯一映射。第一个字符不应该是一个数字。实现可以忽略字母顺序区别的情况,并在点之前将映射限制到八位有效字符。

6、一个#include预处理指示符可以出现在一个已被读的源文件中,因为在另一个源文件里的一个#include预处理指示符,这取决于实现定义的嵌套限制。

7、例1 对#include预处理指示符最通常的用法如下:

#include <stdio.h>
#include "myprog.h"

8、例2 以下片段描述了用宏替换的#include指示符:

#if VERSION == 1
#define INCFILE "vers1.h"
#elif VERSION == 2
#define INCFILE "vers2.h" // 等等
#else
#define INCFILE "versN.h"
#endif #include INCFILE

结束。

ISO/IEC 9899:2011 条款6.10.2——源文件包含的更多相关文章

  1. ISO/IEC 9899:2011 条款6.10.1——条件包含

    6.10.1 条件包含 约束 1.控制条件包含的表达式应该是一个整数常量表达式,除了:标识符(包括那些词法上与关键字相同的)被解析为以下所描述的:[注:因为控制常量表达式在翻译阶段4期间被计算,所以所 ...

  2. ISO/IEC 9899:2011 条款6.10——预处理指示符

    6.10 预处理指示符 语法 1.preprocessing-file: groupopt group: group-part group    group-part group-part: if-s ...

  3. ISO/IEC 9899:2011 条款6.10.3——宏替换

    6.10.3 宏替换 约束 1.两个替换列表是相同的,当且仅当两个替换列表中的预处理符记都具有相同的数.次序.拼写,以及空白分隔符,这里所有的空白分隔符都认为是相同的. 2.当前被定义为一个类似对象的 ...

  4. ISO/IEC 9899:2011 条款3——术语、定义与符号

    3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...

  5. ISO/IEC 9899:2011 条款5——5.2.1 字符集

    5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...

  6. ISO/IEC 9899:2011 条款6.4.2——标识符

    6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier    identifier-nondigit identifie ...

  7. ISO/IEC 9899:2011 条款6.4.3——通用字符名

    6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...

  8. ISO/IEC 9899:2011 条款6.7.10——静态断言

    6.7.10 静态断言 语法 1.static-assert_declaration: _Static_assert    (    constant-expression    ,    strin ...

  9. ISO/IEC 9899:2011 条款6.5.10——按位与操作符

    6.5.10 按位与操作符 语法 1.AND-expression: equality-expression AND-expression    equality-expression 约束 2.这些 ...

随机推荐

  1. angularcli 第八篇(router 路由)

    更多详细:https://segmentfault.com/a/1190000009265310 一.标题:页面有两个按钮(test1.test2),点击这两个按钮,跳转相应页面~ 注:可直接创建一个 ...

  2. Linux必知必会--curl

    你有多自律,你就能走多远~ --久节奏.慢读书 Curl命令 学习每个linux命令都该掌握man命令.(可以使用man命令去查看每个命令的使用说明) curl命令是一个利用URL规则在命令行下工作的 ...

  3. jquery 子元素筛选选择器

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...

  4. 管理员权限运行-C#程序

    C#程序以管理员权限运行 在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也 ...

  5. 《BUG创造队》第六次作业:团队项目系统设计改进与详细设计

    项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验十 团队作业6:团队项目系统设计改进与详细设计 团队名称 BUG创造队 作业学习目标 1.编写完整<软件系统设计说 ...

  6. Vue的参数请求与传递

    Vue不同模板之间的参数传递 页面路由带参数的跳转: 参数接收: Vue向服务器请求资源的两种方式 VUE-RESOURCE 1.Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不 ...

  7. java技术思维导图(转载)

      在网上看到有个人总结的java技术的东东,觉得很好,就保存下来了,码农还真是累啊,只有不断的学习才能有所提高,才能拿更多的RMB啊. java技术思维导图 服务端思维导图 前端思维导图

  8. 08-Flutter移动电商实战-dio基础_伪造请求头获取数据

    在很多时候,后端为了安全都会有一些请求头的限制,只有请求头对了,才能正确返回数据.这虽然限制了一些人恶意请求数据,但是对于我们聪明的程序员来说,就是形同虚设.这篇文章就以极客时间 为例,讲一下通过伪造 ...

  9. Joint Approximative Diagonalization of Eigen matrix (JADE)

    特征矩阵联合相似对角化算法[1]. Cardoso于1993年提出的盲信号分离具有代表性的一种算法.是一种基于四阶累积量特征矩阵近似联合对角化盲分离算法.该算法将目标函数最大化问题等价于一组四阶累积量 ...

  10. vue 首页导航+左侧菜单

    1. Mock.js 前后端分离开发开发过程当中,经常会遇到以下几个尴尬的场景: 1. 老大,接口文档还没输出,我的好多活干不下去啊! 2. 后端小哥,接口写好了没,我要测试啊! 前后端分离之后,前端 ...