函数和预处理命令

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

      作用域分为两种:

     局部作用域:

     {},局部作用域里声明的标识符(局部变量)只能作用于所在的{}里,作用域外对标识符赋值将会报错(栈区)

 全局作用域:

     {}以外的,不放在任何{}里面的变量称为全局变量(例子 g_i),使用范围为从定义开始到文件结束(静态区)

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

a,b与局部变量相同,都在栈区

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

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

可见性:

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

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

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

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

变量的生存期:

变量从诞生到销毁的时间

静态生存期:

该变量的生存期与程序的运行周期相同

1.全局变量

2.用static(静态的)关键字修饰的局部变量

(将局部变量的动态生存期修改为静态生存期)

s_i 在静态区

与全局变量一样,未被初始化时为0

输出结果为11,12

初始化只做一次,第一次执行fn后s_i的空间未被销毁,第二次执行fn,输出结果为12

动态生存期:

除静态生存期外,其余的为动态生存期

程序结束时会被销毁(即在栈区)

auto变量:

即自动变量,变量的空间的开辟和销毁为自动的

register变量:

即寄存器变量,将变量定义为寄存器(存储器,CPU内部)变量,提高读写速率

register是一个建议,不是命令

i 有可能在CPU里,CPU内没有地址

用extern声明外部变量:

函数声明:

多文件编辑:

命令界面: :vsp + 文件名

set mouse=a 鼠标光标移动

编译:gcc -oapp 文件名(两个)

加上extern的那一行一定为声明

sp func.h

头文件中只放声明,不放定义

编译时头文件不参与编译

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

函数前加static 限制函数只能在本.c中使用,无法再其他.c中使用

宏定义

gcc -E 要求编译器只做预处理,不编译

不带参宏:写什么用什么,不加不减不运算,算括号

本质:在预处理阶段,将所有的宏名,替换为数值(无脑文本替换)

宏定义后不加分号

带参宏:

本质:无脑文本替换

宏里面的括号越多越好

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

“文件包含“处理

带#都为文件包含命令

本质:无脑文本替换

文件包含命令后面使用<>,自动去/usr/include里面查找,使用“”,在自己的.c目录里面查找

条件编译

#if 0/1 #endif(注释作用)

0:代码无效

1:代码有效

ifdef 标识符(宏名)

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

调试部分

#ifndef 与#ifdef 相反

规则:在所有的头文件里面

#ifndef FUNC_H

#define FUNC_H

声明

#endif

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值