C语言----函数与预处理学习

函数 

1.作用域

作用域分为全局作用域与局部作用域。

全局作用域就是可以对整个代码源文件生效,

局部作用域就是只能对{}中生效

例如

int a;
void func(int a)
{
    int b=a;
    if(b>0)
    {
        int c;
    }
}

在C语言中规定,全局变量未经初始化时为0,全局变量存放在全局区。形参是局部变量,函数名的作用域是全局的。在编写代码的过程中,全局变量能不用最好还是不用,因为使用全局变量会造成代码的耦合性较高。

变量的生存期是指:变量从被定义开始到被销毁所存在的时间。

生存期又根据变量的类型分为两类:静态生存期与动态生存期。

静态生存期是指:变量存在的时间与程序运行的时间周期相等(变量的存储空间在程序运行之前就被开好了)

栈区具有动态性,全局区具有静态性。

当用static修饰局部变量时,此变量就被存储在了静态区,而不是栈区,此时变量就具有静态生存期,但是不是常量,值可变。但是其作用域依旧是局部作用域。

当用static修饰全局变量时,是限制该变量只能在本文件中使用,其余文件不可调用。

具有静态生存期:static,全局变量,其余的均是动态生存期。

标识符的作用域允许存在包含关系,即可存在局部的局部。而且局部作用域一定是被包含在全局作用域中。

2.可见性(4点):

1.标识符要在声明在前,引用在后。

2.在同一作用域中,不能声明同名的标识符。

3.在没有互相包含关系的不同的作用域中声明的同名标识符,互不影响。 

4.如果在两个或多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见。

3.auto

auto:是指自动变量。是说在定义时变量会自动开辟与销毁空间。在C语言中定义变量会默认有auto。

4.register

register 是指寄存器函数,是将所定义的函数空间开辟在寄存器从,可以更快的调用函数,但是由于其空间小,所以是建议而不是命令。不可取地址。

5.extern

extern是声明函数,并不是定义。而且在头文件中只放声明不放定义。

预处理命令

在编译一个C语言程序的第一步骤就是预处理阶段,这一阶段就是宏发挥作用的阶段。C预处理器在源代码编译之前对其进行一些文本性质的操作,主要任务包括删除注释、插入被#include进来的文件内容、定义和替换由#define 定义的符号以及确定代码部分内容是否根据条件编译(#if )来进行编译。”文本性质”的操作,就是指一段文本替换成另外一段文本,而不考虑其中任何的语义内容。

一、宏定义

在定义宏名时一般是全大写,主要是为了与变量有所区分。预处理就是对宏进行机械式的替换。宏名之后不能加“ ;”。

1、不带参数的宏定义

格式: #define 宏名 字符串

例:#define a 6 则a是宏名,凡是出现a的地方均用6替换

C语言中自带的不带参的宏:%d\n__LINE__与%s\n__FILE__这两个宏的含义分别是输出当前行数与输出当前文件。

2.带参宏:

#define ADD (a, b)a+b

该宏替换也是机械替换,带参宏与函数有着本质的区别。

二、 #include

C语言中通过#include来实现文件包含的操作。文件包含命令有两种#include"  "与#include< >

在绝对路径下(包含根目录)两种写法无区别。#include< >相对路径是/user/include/

#include"  "相对路径是指本文件所在的目录。

三、条件编译

条件编译用的最多的情况是在头文件中

#inndef 文件名
#define 文件名

声明


#endif

其主要是为了在写头文件时,防止多文件包含对同一个文件多次包含。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值