预处理命令

一、标识符的作用域与可见性

1.作用域分为两种:

1.局部作用域:局部作用域里声明的标识符(局部变量)只能作用于所在的{}里,(栈区)

2.全局作用域:独立在任何{}外的变量称为全局变量,范围为从定义到程序结束(静态区)

通过全局变量可以实现函数传参(尽量少用)

所有函数的函数名具有全局作用域

局部变量未初始化为随机数,全局变量未初始化为0(位清零)

2.可见性:

 1.标识符必须先定义再使用

 2.在同一作用域中不能定义同一标识符

 3.在没有包含关系的作用域中定义的同名标识符互不影响

 4.在两个或两个具有包含关系的不同作用域中定义的同名标识符,外层标识符在内层不可见(就近原则)

二、变量生存期:变量从产生到毁灭的时间

1.静态生存期:生存期直到程序结束为止(全局变量)

         用static关键词修饰的局部变量(将局部变量的动态生存期变为静态生存区)

2动态生存期:除静态生存期外,其余均为动态生存期(存在于栈区)

3.auto变量:自动变量,其空间开辟与毁灭均为自动

4.register变量:寄存器变量,将变量定义为寄存器变量,提高读写速率(建议非命令)

5.extern(局外声明变量):extern 为声明,定义只有一次,声明有无数次

6.头文件:其中只放声明,不放定义(不参与编译)

函数形参名可以省略,但一般需要标记清楚

函数前加static表明只能在本.c文件中使用,即使声明也无效

三、预处理命令

1、编译过程:  编辑 ----预处理----编译-----链接-----运行

2.宏定义:gcc -E 要求编译器只做预处理,不编译

3.不带参宏:#define标识符   字符串

本质:在预处理阶段,将所有的宏替换为数值(无脑替换,不做任何运算处理),宏定义不加分号

4.带参宏:#define宏名(参数表) 字符串

本质:也是无脑替换(其中括号越多越好)

带参宏效率高于函数,但会占用大量内存空间

5.文件包含处理:带#均为文件包含命令(无脑替换)

6.条件编译:#if 0/1     #endif(注释作用)  0:代码无效   1:代码有效

7.ifdef标识符(宏名):

预处理阶段,会在程序段1观察宏名是否定义过,若没有定义,则为无效,执行else

调试部分

#ifndef 与#ifdef 相反

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值