C语言中一共有4中作用域:代码块作用域、文件作用域、函数作用域和原型作用域。
1.代码块的作用域,位域一对大括号中的所有语句构成一个代码块(Block)任何在代码块开始声明的标识符都具有代码块作用域,函数定义的形参在函数内部也具有代码块的作用域。
在函数后面声明一个新的代码块可以再次进行变量的声明而不会报错。

#include <setjmp.h>
#include <stdio.h>
jmp_buf j;
void raise_exception(void)
{printf("exception raised\n");longjmp(j, 3); /* jump to exception handler case 3 */printf("this line should never appear\n");
}
int main(void)
{switch (setjmp(j)){case 0:printf("''setjmp'' is initializing ''j''\n");raise_exception();printf("this line should never appear\n");case 1:printf("Case 1\n");break;case 2:printf("Case 2\n");break;case 3:printf("Case 3\n");break;default:break;}{int i =3;printf("i = %d\n",i);}return 0;
}

输出:

/home/andrew/文档/IMPORTENT_C/cmake-build-debug/IMPORTENT_C
''setjmp'' is initializing ''j''
exception raised
Case 3
i = 3Process finished with exit code 0

文件作用域
任何在所有代码块之外声明的标识符(也就是这个标识符不属于任何代码块)都具有文件作用域(File Scope)。它表示这些标识符在整个声明这些标识符的文件中都可以被访问。
注意:在文件中定义的函数名也具有文件作用域,因为函数本身不属于任何代码块。

函数作用域
函数作用域不但决定了可以在程序的什么位置调用函数,而且决定了函数可以访问那些定义,适用于变量标识符的作用域规则也同样适用于函数标识符。在全局作用域中声明的函数在整个代码中都可以使用。

原型作用域
C语言程序中,函数的应用分为函数定义和函数服务(调用)两部分。文件的定义通常在文件的作用域。

高级C语言教程-作用域相关推荐

  1. 高级C语言教程-编译链接调试

    编译器 一般认为所谓的编译就是将便于程序员编写.阅读.维护的高级计算机语言翻译为计算机能够解读.运行的低级机器语言的特定程序.编译器将源代码作为输入翻译生成使用目标语言的等价程序,事实上一般的C语言程 ...

  2. 高级C语言教程-指针和存储

    讲一讲C语言中的值传递引用还有地址传递: 以下面的一段代码为例: void GetMemory(char *p) {p = (char *) malloc(100); } void Test(void ...

  3. 高级C语言教程-存储器和指针

    ATPCS即ARM-THUMB procedure call standard(ARM-Thumb过程调用标准)的简称 回调函数 通常情况下函数的调用是用户的函数调用操作系统的函数,上层的函数调用底层 ...

  4. 高级C语言教程-sscanf()函数使用方式

    C语言支持可变参数的函数,这需要采用 #include <stdio.h>int main( void ) {char tokenstring[] = "15 12 14...& ...

  5. 高级C语言教程-关键字和运算符

    volatile 关键字 一个定义为volatile的变量会被意想不到的改变,这样编译器就不会假设这个变量的值了,精确的来说就是编译器在用到这个变量的时候必须每次都小心的重新读取这个变量的值,而不是使 ...

  6. 高级C语言教程编码风格

    列表内容 每个C文件包含额头文件的顺序应该遵循先底层后上层的原则, ASIC-ii头文件 底层库头文件 操作系统头文件 应用程序头文件 2.利用括号来表示运算的优先顺序 每行语句单独一行,不要使用过长 ...

  7. 高级C语言教程-中断和设备驱动

    简述设备驱动.Boot Loader与BSP之间的区别! 设备驱动是介于底层硬件与操作系统之间的一层软件.设备驱动的主要功能就是屏蔽硬件控制的具体细节,对操作系统提供一个抽象的.统一的硬件资源访问接口 ...

  8. 高级C语言教程-C语言函数setjmp()函数

    **与刺激的abort()和exit()相比,goto语句看起来是处理异常的更可行方案.不幸的是,goto是本地的: 它只能跳到所在函数内部的标号上,而不能将控制权转移到所在程序的任意地点(当然,除非 ...

  9. 鼠标绘图 c语言,c语言高级编程技术教程 图形显示方式与鼠标输入.doc

    c语言高级编程技术教程 图形显示方式与鼠标输入 c语言高级编程技术教程 图形显示方式和鼠标输入 图形显示方式和鼠标输入 问题的提出编写程序,使用鼠标进行如下操作:按住鼠标器的任意键并移动,十字光 标将 ...

最新文章

  1. java servlet filter_Java的Servlet、Filter、Interceptor、Listener
  2. Python正则表达式初识(十)附正则表达式总结
  3. Outlook addon CommandBarButton picture 的不透明效果解决方案
  4. 哈佛最新成果:温度高于25℃可降低新冠病毒传染率,但不足以完全控制疫情...
  5. “勒索病毒”为什么盯上了比特币?
  6. mysql不支持addbatch_【MySql】Java 批量插入数据库addBatch
  7. MyBatis 一级缓存与二级缓存的区别?
  8. mysql 文卷_mysql数据库试卷
  9. 我的世界JAVA版编程语言_Java版版本记录/开发版本
  10. python网格搜索优化参数_python – 是否有可能通过网格搜索调整参数scikit-learn中的自定义内核?...
  11. 如何将zipoutputstream返回_嫦娥五号返回器要“跳”一下再回地球!这一“跳”大有讲究...
  12. 学习python内一般函数知识
  13. 千兆网络PHY芯片 RTL8211E的实践应用
  14. jvm虚拟机及创建对象流程
  15. Linux 8723be无线网卡,rtl8723be无线网卡驱动 for ubuntu
  16. 基础测绘数据分类标准
  17. 举个栗子~Tableau 技巧(208):使用“显示/隐藏”按钮,快速切换图表
  18. 2017 年终总结 --- 忙碌而又颇有意义的一年
  19. 未睹棺椁先哭君——谷歌墓志铭
  20. 【Android】二进制图片和Bitmap的getPixel方法解析

热门文章

  1. 无法打开网页~咋办?
  2. nyoj676小明的求助
  3. static关键字总结
  4. NYOJ 30 Gone Fishing(贪心)
  5. NYOJ 904 search 二分查找
  6. StringTokenizer类的使用方法
  7. django下载excel,使用django-excel插件
  8. 【ACM】最长公共子序列 - 动态规划
  9. 算法/数据工程师必备技能
  10. Linux Kernel 3.8.8/3.4.41/3.0.74 发布