深刻理解----修饰变量----关键字

1.extern关键字

  • 基本解释:引用一个全局的量,
    • extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。

使用介绍

①全局的变量

  • 在一个源文件里定义了一个变量,int i = 0;
  • 在另一个文件里用 extern int i;就可以访问同一个变量i;

②全局的常量

  • 在一个源文件里定义了一个常量,int const i = 0;
  • 在另一个文件里用 extern const int i;就可以访问同一个常量i;

③坑

  • 不能有重复定义的全局变量----不能在两个文件定义一样的变量
    • 即不能在两个文件中,int i = 0;或者int const i = 0;
  • 如果全局变量被修饰为全局常量,那么也应该应用全局常量---加const

2.宏定义 #define

  • 宏定义又称为宏代换、宏替换,简称“宏”。

说明:

- (1)宏名一般用大写
- (2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义
- (3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
- (4)宏定义末尾不加分号;
- (5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
- (6)可以用#undef命令终止宏定义的作用域
- (7)宏定义可以嵌套
- (8)字符串" "中永远不包含宏
- (9)宏定义不分配内存,变量定义分配内存。
- (10)宏定义不存在类型问题,它的参数也是无类型的。

有参宏定义中#的用法

  • 加双引号
    #define STR(str) #str
    #用于把宏定义中的参数两端加上字符串的""
    比如,这里STR(myname)会被替换成"myname"

有参宏定义中##的用法

  • 拼接
  #define WIDE(str) L##str
  则会将形参str的前面加上L
  比如:WIDE("abc")就会被替换成L"abc"
  如果有#define FUN(a,b) vo##a##b()
  那么FUN(id ma,in)会被替换成void main()
宏定义的值,在程序中是不可改变的值,而且在引用的时候会分配临时内存空间

3.定义全局变量

  • 全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。
  • 当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。
①全局变量当没有其他关键字修饰时。他定义的值可以在其他地方更改,但是好处是只分配一份内存空间。

②当全局变量被const关键字修饰时。他定义的是常量,他的值不能在其他地方更改,而且在内存中也只占用一份内存空间。

4.const关键字

  • const用法主要是防止定义的对象再次被修改,定义对象变量时要初始化变量。节约内存空间,

5.static关键字

  • 首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0.

①.修饰局部变量

  • 不改变局部变量作用域
  • 延长了局部变量的寿命,可以让局部变量在整个程序运行过程中只有一份内存,且只会初始化一次

②.修饰全局变量

  • 让这个全局变量仅限于当前文件能访问(哪个文件:定义这个全局变量的文件)

6.static 关键字 搭配 const 关键字

  • 不能被外界引用,而且是常量
  • 防止重复定义

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端儿

理解运用JS的闭包、高阶函数、柯里化

JS的闭包,是一个谈论得比较多的话题了,不过细细想来,有些人还是理不清闭包的概念定义以及相关的特性。

2933
来自专栏java一日一条

(转)Java中的System类

System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。

1022
来自专栏Java编程技术

诡异的类型转换

最近在做应用迁移时候遇到了一个诡异的类型转换问题,感觉比较有意思,就记录下来和大家分享下。

982
来自专栏从零开始学 Web 前端

04 - JavaSE之异常处理

2.throw new someExpresion("错误原因"); 表示的是手动抛出异常。 **

1374
来自专栏玄魂工作室

《改善C程序代码的125个建议》-防止整数类型产生回绕与溢出

以下内容摘抄自《改善C程序代码的125个建议》: 建议2:防止整数类型产生回绕与溢出 到C99为止,C语言为我们提供了12个相关的数据类型关键字来表达各种数据...

3047
来自专栏marsggbo

python的with语句,超级强大

With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文...

21310
来自专栏大前端_Web

详解javascript作用域和闭包

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/deta...

1234
来自专栏www.96php.cn

PHP关键字、PHP 语言结构(Language constructs)和函数的区别

1、 什么是语言结构和函数 语言结构: 就是PHP语言的关键词,语言语法的一部分; 它不可以被用户定义或者添加到语言扩展或者库中; ...

4019
来自专栏java一日一条

Java字符串之性能优化

在程序中你可能时常会需要将别的类型转化成String,有时候可能是一些基础类型的值。在拼接字符串的时候,如果你有两个或者多个基础类型的值需要放到前面,你需要显式...

912
来自专栏韩伟的专栏

框架设计原则和规范(二)

此文是《.NET:框架设计原则、规范》的读书笔记,本文内容较多,共分九章,将分4天进行推送,今天推送4-5章。 1. 什么是好的框架 2. 框架设计...

3095

扫码关注云+社区

领取腾讯云代金券