10-全局变量/预处理指令/const

People Lack Willpower,Rather Than Strength!

1.全局变量和局部变量

  • 所谓全局变量/局部变量是根据作用域来划分的.
  • 局部变量:

    • 定义:定义在函数/代码块/函数形参小括号内的变量称为局部变量;
    • 作用域:从定义那一行开始直至其所在的代码块结束;
    • 生命周期:从程序运行到定义他的那一行开始分配空间,直至程序离开该变量所在的作用域;
    • 注意:同一作用域内不可以定义同名的局部变量;同名局部变量会覆盖全局变量.
  • 全局变量:

    • 定义在函数外边的变量称为全局变量
    • 作用域范围:从定义哪行开始直到文件结尾
    • 生命周期:程序一启动就会分配存储空间,直到程序结束
    • 存储位置:静态存储区
    • 可以重名,但其实他们拥有的空间是同一块.
  • static & extern 对局部变量的作用

    • static对局部变量的作用

      • 延长局部变量的生命周期,从程序启动到程序退出,但是它并没有改变变量的作用域
      • 定义变量的代码在整个程序运行期间仅仅会执行一次(该变量整个程序运行期间只创建一次).
    • extern用在函数内部

      • 不是定义局部变量,它用在函数内部是声明一个全局变量
  • static & extern对全局变量的作用

    • static 修饰全局变量,表示是内部全局变量,只能文件内使用!

      • 对全局变量修饰时,既是声明也是定义.⭐️
    • extern修饰全局变量时,表示声明该全局变量为外部变量,可以为多个文件共用. 但是虽然可以共用,A文件中定义的外部变量,B文件如果想使用,前提是得声明一下!!

    - 声明外部变量/函数并不会开辟存储空间!!!🐓
    - A文件中,如果只是声明了一个外部变量,而没有定义会报错:
    extern int a;
    int main(){
        printf("%a\n",a);
        return 0;
    }
    报错如下:
    Undefined symbols for architecture x86_64:
  "_a", referenced from:......
  • static&extern对函数作用,就是声明外部/内部函数.

2.预处理指令

  • 位置:预处理指令可以出现在程序的任何位置

  • 好处:合理地使用预处理功能编写的程序便于阅读、修改、移植和调试,也有利于模块化程序设计。

  • 1.宏:

    • 格式:#define 标识符 字符串
    • 被定义为“宏”的标识符称为“宏名”。编译预处理时进行“宏代换”或“宏展开”.
    • ""括起来的字符不会被当做宏名!
    • 宏展开时只是简单的替换,不检查语法.
    • 结束宏定义: #undef
  • 2.条件编译

    • 为什么要使用条件编译?

      • 1)按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。有利于程序的移植和调试。
      • 2)条件编译当然也可以用条件语句来实现。 但是用条件语句将会对整个源程序进行编译,生成 的目标代码程序很长,而采用条件编译,则根据条件只编译其中的程序段1或程序段2,生成的目 标程序较短。
    • 注意:条件编译后面的条件表达式中不能识别变量,它里面只能识别常量和宏定义!

3.typedef

  • typedef 原类型名 新类型名;

    • 可见可以对类型名typedef,也可以是原类型本体.
  • 宏定义和函数的区别

    • 1> 行为: 宏定义不涉及存储空间的分配、参数类型匹配、参数传递、返回值问题
    • 2> 时间: 函数调用在程序运行时执行,而宏替换只在编译预处理阶段进行。所以带参数的宏比函数具有更高的执行效率
  • 宏定义和typedef区别

    • 时间:宏定义在预处理完成的;typedef在编译时完成.
    • 功能:宏定义只是简单的字符串替换; typedef不是作简单的代换,而是对类型说明符重新命名。重命名的标识符具有原类型名的所有功能!

4.const修饰符!!

  • what is const?
    • const是一个类型修饰符
      • 1>使用const修饰变量则可以让变量的值不能改变

      • 2>常类型是指使用const修饰的类型,常类型定义的变量或对象的值是不能被更新的。

      • 3> 对于const修饰指针:

        • 先看“*”的位置
        如果const 在 *的左侧 表示值不能修改,但是指向可以改。
        如果const 在 *的右侧 表示指向不能改,但是值可以改
        如果在“*”的两侧都有const 标识指向和值都不能改。
        
    • 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。那程序运行期间那??
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容