6.2.2 标识符的连接

1、在不同作用域中声明的一个标识符或在同一作用域多次出现的一个标识符可以被用作对同一个对象或函数的引用,通过一个称为连接的过程。[注:在两个不同的标识符之间没有连接。]有三种类型的连接:外部连接,内部连接,无连接。

2、在构成一整个程序的翻译单元和库集合中,带有外部链接的一个特定的标识符的每个声明指示了同一个对象或函数。在一个翻译单元内,带有内部连接的一个标识符的声明指示了同一个对象或函数。不带有连接的一个标识符的每个声明指示了一个唯一的实体。

3、如果一个对象或一个函数的一个文件作用域的标识符包含存储类说明符static,那么该标识符具有内部连接。[注:一个函数声明只有当它在文件作用域时才可以包含存储类说明符static;见6.7.1]

4、对于用存储类说明符extern所声明的一个标识符,在某一作用域中该标识符的之前的声明可见,[注:在6.2.1中指出,后面的声明可能隐藏之前的声明。]如果之前的声明指定了内部或外部连接,那么在之后声明的该标识符的连接具有与之前声明所指定的相同的连接。如果之前没有声明可见,或者如果之前的声明没有指定连接,那么标识符具有外部连接。[译者注

static int a;    // 声明为static存储类别

extern int a;   // 由于之前声明的存储类为static,所以这里的a具有static存储类别

int main(void)
{
printf("a = %d\n", a); return ;
} static int a = ; // 这里对a进行定义并初始化

代码示例2:

extern int a;    // 上面没有对a的声明

int main(void)
{
printf("a = %d\n", a); return ;
} static int a = ; // ERROR! 之前声明的a为外部连接存储类别,与static存储类别冲突 int a = ; // OK!a具有外部存储类别

5、如果对一个函数的标识符的声明没有存储类别说明符,那么其连接完全被确定为它是由extern存储类别说明符来声明的。如果对一个对象的标识符的声明具有文件作用域,并且没有存储类别说明符,那么其连接是外部的。

6、以下标识符不具有连接:一个被声明为一个对象或一个函数以外的任何东西;一个被声明为一个函数参数的标识符;用于声明一个对象,而此对象不具有存储类标识符extern的一个语句块作用域。

7、如果在一个翻译单元内,同一个标识符既以内部连接的形式出现,又以外部连接的形式出现,那么行为是未定义的。

ISO/IEC 9899:2011 条款6.2.2——标识符的连接的更多相关文章

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

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

  2. ISO/IEC 9899:2011 条款6.2.1——标识符的作用域

    6.2.1 标识符的作用域 1.一个标识符可以表示一个对象:一个函数:一个结构体.联合体或枚举的一个标签或一个成员,一个typedef名:一个标签名:一个宏名:或一个宏形参.相同的标识符可以在程序中不 ...

  3. ISO/IEC 9899:2011 条款6.2.3——标识符的名字空间

    6.2.3 标识符的名字空间 1.如果一个特定标识符的多个声明在一个翻译单元的任意一点可见,那么语法上下文会区分对不同实体的引用.从而,对于标识符各种不同的类别具有独立的名字空间: ——标签名(通过标 ...

  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.3——通用字符名

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

  7. ISO/IEC 9899:2011 条款5——5.1.2 执行环境

    5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...

  8. ISO/IEC 9899:2011 条款4——标准顺从

    4. 标准顺从 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为 ...

  9. ISO/IEC 9899:2011 条款6——语言

    6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...

随机推荐

  1. C++——virtual function

    无论是pure virtual还是impure virtual,都允许子类override他.但是真两种方式还是有一点差别,如果是pure virtual,那么父类是十分强烈希望子类override他 ...

  2. 【深度学习】Precision 和 Recall 评价指标理解

    1. 四种情况 Precision精确率, Recall召回率,是二分类问题常用的评价指标.混淆矩阵如下: 预测结果为阳性 Positive 预测结果为假阳性 Negative 预测结果是真实的 Tr ...

  3. 大数据之路week06--day07(Linux中的mysql的离线安装)

    这里我提供 服务端和客户端的两个jar包的百度云,也是我使用的 链接:https://pan.baidu.com/s/11a3LT-ENZ8n9IF19-VjmWA 提取码:bdls 离线安装Mysq ...

  4. python开发的百度翻译接口

    做的一个python版的百度翻译,附代码 #!/usr/bin/env python # -*- coding:utf-8 -*-   ''' 爬虫之百度翻译 需要的库有 js2py, request ...

  5. git将一个分支的内容替换为另一分支内容

    假设我想将我的linux分支内容替换master分支的内容. # 切换到master分支 git checkout master # 再将本地的master分支重置成linux git reset - ...

  6. 使用SpringTask 进行Java定时任务开发

    (我这里的案例 是模拟 将项目包放到tomcat里面运行 ) 新建一个Java Web的Maven项目....... 此过程省略... 项目结构如图: 1.pom.xml 配置 <?xml ve ...

  7. Educational Codeforces Round 75 (Rated for Div. 2) C. Minimize The Integer

    链接: https://codeforces.com/contest/1251/problem/C 题意: You are given a huge integer a consisting of n ...

  8. Color Highlight 鼠标放在 #f3f 上面其背景会变成相应的颜色的插件 DocBlockr自动补全注释

    不是  Color Highlighter    而是 Color Highlight  少了 er  颜色功能还是很爽的,找了好久 鼠标放在 #f3f 上面其背景会变成相应的颜色的插件 DocBlo ...

  9. java后台防止XSS的脚本攻击

    import java.util.regex.Pattern; //具体过滤关键字符public class XSSUtil { private static Pattern[] patterns = ...

  10. xml介绍+xml创建+xml读取

    1.xml介绍:(URL:https://blog.csdn.net/weixin_37861326/article/details/81082144) xml是用来传输内容的,是w3c推荐的 2.使 ...