typedef

extern

static

_Thread_local

register

其中,除了 typedef (放在这里仅仅是为了描述语法方便),其它几个(配合变量声明的位置)描述了的变量的 linkage 和 storage duration。但是 storage class specifier 跟 linkage / storage duration 并不是一一对应的。

linkage:

linkage 有三种,exteranl, internal,none 。

linkage 用于描述多次相同的声明是否描述同一个变量。

external linkage 的变量表明在不同源文件(实际应为 translation unit)声明的同名变量(包括 linkage 与 type 都相同,下同)为同一个变量。通常使用 extern 声明。

internal linkage 的变量表明在不同源文件中的同名变量为不同的变量,但是同一个源文件中的多次声明为同一个变量。

no linkage 表明变量的每一个声明(即使同名)都是不同的变量。没有 extern 修饰的局部变量都是 no linkage

storage duration:

storage duration 是对象(object)的生存期:有四种:static, thread, automatic, allocated 。

static: 在整个程序的周期存在。全局变量,external linkage 变量,static 变量,等等都是 static storage duration。

thread: 在每个线程的存在周期存在。每个线程有自己不同的副本。使用 _Thread_local 声明。

automatic: 一般的局部变量。在定义域内存在,离开定义域则声明周期结束。

allocated: 使用 malloc 等动态内存管理函数创建的对象。他们没有自己对应得变量。但是通常他们得地址会存在一个变量中。

C++ 的跟这个相似但是并不相同。

“函数返回一个值相当于定义一个和返回值类型相同的临时变量并用return后面的表达式来初始化。

这个是描述 C++ 的,不是 C 。C++ 由于有类,所以比较复杂。另外,在 C++ 里,这个叫临时对象,而不是临时变量。

C 的 return 直接返回一个值。

C++ 一定要明确此处出翔的临时对象,因为在 C++ 里临时对象的创建与销毁会带来副作用(会调用构造与析构函数)。

产生这个问题的原因是我无法记忆linux里面ELF文件中bss段存储的变量到底是什么。。我觉得我对变量的类别没有一个清楚的认识。

bss 是放(全局)未初始化变量的。局部变量不会进 bss 。

c语言中变量有什么作用是什么,C语言里面局部变量和临时变量有什么区别?相关推荐

  1. c语言中常量有何作用,正确的C语言常量是什么?

    C语言的常量有整数常量,实型常量,字符常量,符号常量等. 1.整数常量 整数常量是指直接实用的整形常数,又称整形常数或者整数,例如,1,-9等.整数常量可以是长整形.短整型.符号整型和无符号整型. a ...

  2. c语言中符号是什么作用是什么,c语言中的符号|=是什么意思?

    bit_file->rack |=bit_file->mask; 补充:上面语句中的 |= 是什么意思? 完整源代码: /*************开始BITIO.C**********/ ...

  3. C语言中的逗号的作用,C语言逗号运算符和逗号表达式基础总结

    逗号运算符的作用: 1,起分隔符的作用: 定义变量用于分隔变量:int a,b 输入或输出时用于分隔输出表列 printf("%d%d",a,b) 2,用于逗号表达式的顺序运算符 ...

  4. C语言中双感叹号的作用

    1.C语言中双感叹号的作用 (1)感叹号的作用:感叹号是逻辑运算符,表示逻辑非,也就是把真变成假,把假变成真: (2)在C语言中,0值表示假,非0值都是真,所以感叹号会把非0值变成0,而把0值变成1: ...

  5. c语言中函数名可不可以由用户命名,C语言中变量名及函数名的命名规则与驼峰命名法...

    在程序设计中,变量名.函数名.数组名等统称为标识 符.简单地说,标识符就是一个名字.除库函数的函数名由系统定义外,其余都由用户自定义.C语言规定,标识符只能由字母(a-z,A-Z).数字 (0-9). ...

  6. c语言中不能编译,为什么`int;`可以在C语言中很好地编译,而在C ++中却不能?

    考虑以下程序(请参见此处的现场演示). #include int main(void) { int ;  // Missing variable name puts("Surprise&qu ...

  7. C语言中的静态函数的作用

    转载 在C语言中为什么要用静态函数(static function)? 如果不用这个static关键字,好象没有关系.那么,用了static以后,有什么作用呢? 我们知道,用了static的变量,叫做 ...

  8. c语言中的除号什么作用,c语言中除号用什么表示

    前言继承是OOP设计中的重要概念.在C++语言中,派生类继承基类有三种继承方式:私有继承(private).保护继承(protected)和公有继承(public).一.继承规则继承是C++中的重要特 ...

  9. 详解C语言中头文件的作用

    大家好,先做个自我介绍,我是天蓬,欢迎阅读本篇博文. 由于本人理解能力不是很好,阅读他人文章时,常常看得晕头晕脑,这让我很是头疼,我想,世界上一定还有和我一样的人(哈哈,不是说你么笨哦).所以,我将会 ...

最新文章

  1. 朴素贝叶斯算法的python实现
  2. thinkphp-volist3
  3. C#语言-07.文件操作
  4. 使用 cglib_java动态代理(JDK和CGLIB原理解析与使用)
  5. 工程师如何“神还原”用户问题?闲鱼回放技术揭秘
  6. zsh 使用通配符功能
  7. 基于微服务和Docker的PaaS云平台架构设计
  8. Enviropro EP100D-08测定仪
  9. java中继承内部类的方法_Java自学-接口与继承 内部类
  10. 2021年少儿编程未来趋势分析
  11. RIDE 图标点击没反应
  12. c语言代码查错软件,Ubuntu下面的C语言代码检查工具 Splint
  13. 【Gradle】Starting a Gradle Daemon, 1 incompatible and 5 stopped Daemons could not be reused
  14. Appium: Windows系统桌面应用自动化测试(二)
  15. 查看java安装路径[linux]
  16. SPSS案例分析3:因子分析
  17. JavaBean对象与jfinal的Record对象互转
  18. 什么是逆向工程?逆向工程的优势
  19. vb编程转为c语言,请大神帮我把C语言转换成VB语言
  20. Docker in Docker dind

热门文章

  1. Go的日志模块glog调研笔记
  2. 在Ubuntu 16.04.3 TLS上玩转tls协议的简单demo
  3. 在CentOS 6.6上搭建OpenResty 1.9.7.4并输出示例
  4. UE虚幻引擎:建筑可视化学习教程 Unreal Engine : Architectural Visualization
  5. 关于C#调用非托管DLL,报“内存已损坏的”坑,坑,坑
  6. [UWP小白日记-10]程序启动屏(ios解锁既视感)
  7. C++ 重载运算符简单举例
  8. unity编辑器扩展_01(在工具栏中创建一个按钮)
  9. DDD领域驱动设计之聚合、实体、值对象
  10. MVC系列1-MVC基础