IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> [C语言基础]作用域,链接,存储周期 -> 正文阅读

[C++知识库][C语言基础]作用域,链接,存储周期


九层之台,起于累土。


作用域

作用域:Scope of Identifiers。

同一标识符指定的不同实体要么具有不同的作用域,要么在不同的命名空间

标准C定义了4个域:

  1. function(函数域)
  2. file(文件域)
  3. block(块域)
  4. function prototype(函数原型域)

function–函数域

函数域是指:从某函数的开始到函数的结束的一段范围。
标签 是唯一具有函数域的标识符类型。这意味着无论标签出现在该函数的什么地方,其对该函数的任何位置的代码都是可见的。

#include<stdio.h>
...

void test()
{
	if(...)
		goto label;
label: /* label具有函数域 */
	...
}

file–文件域

如果某标识符的声明出现在所有的块或者参数列表之外,则具有文件域。
文件域的范围从标识符声明处开始,到包含该声明的文件结尾处。

#include<sdtio.h>
...
int a; /* a具有文件域*/
void test()
{
	...
}

block–块域

如果某标识符的声明出现在块或函数定义中的参数声明列表中,则其具有块域。
块域的范围从标识符声明开始,到块的末尾结束。

#include<stdio.h>
...
void test(int a)
{
	int b; /* a,b具有块域,到函数末尾结束*/
	if(...)
	{
		int c; /* c具有块域,到if控制的块的末尾结束*/
	}
}

function prototype–函数原型域

如果某标识符的声明在函数声明的列表中,则其具有函数原型域。
函数原型域的范围一直到函数原型声明的末尾。

#include<stdio.h>
...
void test(int a); /* a具有函数原型域 */

链接

链接:Linkage of Indentifiers

作用域是由编译器处理的属性,链接是由链接器处理的属性。

链接是一种属性,它描述了链接器如何链接标识符,是否只能在声明的文件中使用?是否可供另一个文件使用?…

链接有3种:
1.内部链接
2.外部链接
3.空链接

内部链接

如果一个具有文件作用域的对象或者函数的声明包含static,则该标识符具有内部链接。
内部链接只能在声明该标识符的文件内使用。

#include<stdio.h>
...
static int a; /* a具有内部链接*/
static void test(); /* test函数具有内部链接 */

外部链接

外部链接是具有文件作用域的对象或函数的默认属性,可以在一个多文件程序的任何地方使用。
extern可以指定一个标识符具有外部链接,如果extern声明的标识符的先前声明可见并指定了内部或外部链接,则这个声明的标识符与之前声明的标识符的链接相同,如果没有可见的先前声明或者先前声明没有指定链接,则标识符具有外部链接。

#include<stdio.h> /* a.c */
int a;

...

#include<stdio.h> /* b.c */
extern int a;

空链接

具有块作用域和函数原型作用域的对象具有空链接。


存储时期

存储时期又叫生命周期,针对的是对象。
有2种生命周期:
1.static–静态生命周期
2.automatic–自动生命周期

static–静态生命周期

具有文件作用域,或者带有static声明的对象具有静态生命周期,它的生命周期是程序的整个执行过程,它的值只在程序开始初始化一次。

#include<stdio.h>
...
int a; /* a具有静态生命周期 */
void test()
{
	static int b; /* b具有静态生命周期 */
}

automatic–自动生命周期

非文件作用域且没有static声明的对象具有自动生命周期。
具有自动生命周期的对象的生命周期,从定义对象开始,直到代码执行到该对象作用域的结束。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:40:26  更:2021-10-07 13:42:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 2:42:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码