标识符和预处理命令

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

1.局部作用域(在栈区):定义变量 }是由函数、代码块(如循环或条件语句)等边界所定义的。在局部作用域内声明的变量(局部变量)只能在该作用域内访问。

(1)形参为局部变量。

(2)局部变量的生命周期从它们被创建时(当代码块被调用时)开始,到代码块结束时自动销毁。每次调用该函数时,局部变量都会被重新创建。

2.全局作用域(在静态区,可用于函数传参。):指在一个程序中,变量或函数在整个文件或多个文件中可被访问的范围。相对于局部作用域,全局作用域的变量的生命周期覆盖整个程序的运行时间。

(1)全局变量未被初始化,会自动位模式清零(值为0)。

(2)所有函数都具有全局性。

3.标识符使用规则

(1)标识符必须先定义再使用。

(2)在没有包含关系的不同作用域中定义的同名标识符互不影响。

(3)在两个或两个具有包含关系的不同作用域中定义同名标识符,外层标识符在内层不可见。

(4)在同一作用域当中不能定义同名标识符。

4.变量的生存期

(1)静态生存期:是指在程序执行过程中分配内存的区域,其中的变量在程序的整个生命周期内存在,变量的生存期与程序运行周期相同。通常用于存储全局变量和静态变量。(用static修饰的局部变量,将动态生存区改为静态生存区。)

(2)动态生存期:是计算机程序在运行时申请内存的区域。与栈存储区(Stack)不同,动态生存区允许程序在运行时根据需要动态分配和释放内存。动态分配的内存的生命周期由程序员控制。内存可以在运行时分配,并且在不再使用时通过调用free()进行释放。这与栈上的局部变量不同,后者在离开作用域时自动释放。

5、关键字

(1)auto:用于声明自动变量(automatic variables)。这是最常见的变量类型,通常是在函数内部定义的变量

(2)static:(a)在全局变量或函数前加static则该全局变量或函数只能在本.c中使用

                    (b)在函数内部使用 static 关键字声明的变量称为静态局部变量。

(3)register:用于请求编译器将变量存储在 CPU 的寄存器中, 在cpu中没有地址。

(4)extern:用于声明一个变量或函数是在其他源文件中定义的。它主要用于实现跨文件的数据共享和函数调用,使得不同模块或源文件之间能够访问彼此的变量或函数。

6.头文件中只放函数声明。

二、预处理命令(在编译前)

(1)编辑  预处理  编译 链接  运行

(2)宏定义(宏名大写)

(a)无参宏:(#define 标识符 字符串)后不加本质上是文本替换在预处理阶段将宏名替换为具体内容。

(b)带参宏:(#define 参数表 字符串)通过宏替换机制在预处理阶段进行文本替换,使得代码更加灵活和简洁。

(3)文件包含:(#include<文件名>  #include"文件名")文件包含(Include)是一种通过引入外部文件的方式来组织代码和复用功能的机制。当编译器遇到 #include 指令时,它会将指定的文件的内容直接插入到当前源文件的相应位置。

(4)条件编译:允许程序根据预定义的宏或自定义条件选择性地编译代码的一部分。

条件编译主要使用以下预处理指令:

  • #define:定义一个宏。
  • #ifdef:如果定义了宏,则编译后面的代码。
  • #ifndef:如果未定义宏,则编译后面的代码。
  • #if#elif#else#endif:根据表达式的值决定编译。
  • #undef:取消宏定义。
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值