【初识C语言(5)】C语言关键字+define定义常量和宏

news/2024/11/14 12:33:47/

文章目录

  • 1. 常见关键字
  • 2. 关键字 typedef
  • 3. 关键字 static
    • 3.1 修饰局部变量
    • 3.2 修饰全局变量
    • 3.3 修饰函数
  • 4. define 定义常量和宏

1. 常见关键字

在这里插入图片描述

  • C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的。
  • 这里先主要讲解关键字 typedef 和关键字 static

2. 关键字 typedef

  • 在使用例如 unsigned int 这种很长的类型的时候,类型过长看的都烦,此时就需要使用 typedef 来对这类又臭又长的类型进行简化了。
  • typedef 顾名思义是类型定义,这里应该理解为类型重命名

举个栗子

//关键字 typedef#include <stdio.h>typedef unsigned int uint;
//将 unsigned int 重命名为 uint, 所以 uint 也是一个类型名int main()
{//观察num1和num2,这两个变量的类型是一样的unsigned int num1 = 0;uint num2 = 0;//unsigned int 等价于 uint,只是名字不同而已return 0;
}

3. 关键字 static

static 是用来啊修饰变量和函数的

  1. 修饰局部变量 - 称为静态局部变量;
  2. 修饰全局变量 - 称为静态全局变量;
  3. 修饰函数 - 称为静态函数;

3.1 修饰局部变量

  • static 修饰局部变量改变了局部变量的生命周期;
  • 让静态局部变量出了作用域依然存在,直到程序结束的时候,局部变量的生命周期才会结束。

举个栗子

  • 不加 static 的局部变量,出了作用域就会结束生命周期,变量销毁,下次再进作用域时重新创建局部变量,所以这种情况下对变量进行操作的值不会保存下来。
//关键字 static#include <stdio.h>void test()
{int a = 1;//每次进来都会重新创建一个变量 a 并赋值为 1a++;printf("%d ", a);//打印2
}
//出了作用域之后 a 的生命周期结束,将变量 a 销毁;
//不会保存 a++ 之后的值 2int main()
{int i = 0;while (i < 10)//这样一个动作重复十次之后就会打印10个2{test();i++;}return 0;
}

在这里插入图片描述

  • 加了 static 的局部变量,即使出了作用域也不会销毁,会将该变量的生命周期延长,在作用域中对局部变量进行的操作将会保留下来直到程序结束。
#include <stdio.h>void test()
{static int a = 1;//除了第一次进入,之后每次进来都会直接跳过这步操作a++;printf("%d ", a);//2 3 4 5 6 7 8 9 10 11
}
//出了作用域之后 a 的生命周期不会结束;
//会保存每次 a++ 之后的值直到循环结束int main()
{int i = 0;while (i < 10){test();i++;}return 0;
}

在这里插入图片描述

3.2 修饰全局变量

  • 不用 static 修饰全局变量:一般情况下,在一个程序内定义的全局变量,可以在多个源文件当中使用。

在这里插入图片描述

  • 使用 static 修饰全局变量:而在二般情况下,假设我创建的全局变量我就是不给其他人用,这个时候就可以用上 static 来修饰全局变量,让全局变量只能在本源文件下使用。

在这里插入图片描述

  • 在使用 static 修饰全局变量的时候,感官上来说就是使全局变量的作用域变小了。

3.3 修饰函数

  • 函数和全局变量一样,在本源文件底下写的函数,在其他源文件处也可以使用。

  • static 修饰函数和修饰全局变量非常类似,也是把自己写的函数框在本源文件底下不给别人用。

  • 不用 static 修饰函数:其他源文件可以调用该函数。

在这里插入图片描述

  • 使用 static 修饰函数:其他源文件不可以调用该函数。

在这里插入图片描述

4. define 定义常量和宏

define 定义标识符常量

#include <stdio.h>//define定义标识符常量
#define MAX 1000int main()
{printf("%d\n", MAX);int n = MAX;printf("%d\n", n);int arr[MAX] = { 0 };return 0;
}

define 定义宏

  • 特点:宏有参数
//define定义宏
//		 ↓宏名		 ↓宏体
#define ADD(x, y) ((x)+(y))
//			  ↑参数,参数无类型
#include <stdio.h>
int main()
{int sum = ADD(2, 3);printf("sum = %d\n", sum);sum = 10*ADD(2, 3);printf("sum = %d\n", sum);return 0;
}

http://www.ppmy.cn/news/542777.html

相关文章

Oracle数据库从入门到精通系列之十八:详细总结Oracle数据库核心知识点

Oracle数据库从入门到精通系列之十八&#xff1a;详细总结Oracle数据库核心知识点 一、Oracle数据库核心概念二、Oracle非容器数据库三、Oracle容器数据库四、容器数据库和非容器数据库的区别五、Oracle数据库多租户六、Oracle数据库多租户数据库模型七、Oracle数据库类型八、O…

修改热血传奇服务器地址,传奇私服如何更改上线地点

在传奇私服(http://www.000sf.com)中我们可以对玩家的出生地点做出修改&#xff01;可以通过我们对客户端下一些文件的简单修改就可以实现这个功能&#xff01;此方法适用于所有的私服版本&#xff01;如果你想要让你的游戏显示出与众不同的地方&#xff0c;那么我们就可以从这…

基于电容电流前馈与电网电压全前馈的三相LCL并网逆变器谐波抑制MATLAB仿真

基于电容电流前馈&#xff0b;电网电压全前馈的三相并网逆变器谐波抑制MATLAB仿真资源-CSDN文库https://download.csdn.net/download/weixin_56691527/87940934模型简介&#xff1a; 测试环境为MATLAB2021b 一共包含两个模型&#xff1a;一个是传统无改进模型&#xff0c;一个…

热血传奇Tile地图绘制方法分析及平滑绘制分析

http://blog.csdn.net/lyin_c/article/details/25742765 众所周知热血传奇的地图绘制是不平滑的。因为其绘制间隔是以游戏中的X,Y坐标为单位进行绘制间隔。而一个X坐标.和Y坐标 在游戏内表示 48&#xff0c;32 个像素点。 而游戏中的房屋等元素在我看来更是坑爹。因为房屋这些元…

关于热血传奇actor绘制的分析与思考

代码内将每个actor的动作细分为 站立 行走 攻击 死亡 等等。 而每个动作都包含8个方向的定义。指定如何从资源文件中 获取相应的纹理。 以下是方向的常量 // Actor 方向常量DIR_UP 0;DIR_UPRIGHT 1;DIR_RIGHT 2;DIR_DOWNRIGHT 3;DIR_DOWN 4;DIR_DOWNL…

【热血传奇】 脚本开发之变量详解

标识 [001]-[499](各引擎不同标识的上限值不能。正常的是499个)&#xff0c;这不是变量&#xff0c;这是标识 标识的初始值是关闭的&#xff0c;它不会因为人物下线或服务器重启而重置 标识和变量不同的是只有0和1&#xff0c;标识是私有的&#xff0c;不共享。 一般适用于游戏…

怎样制作传奇私服服务器,新手传奇gm必须学会如何制作传奇私服小地图

对于任何一个传奇私服服务器来说小地图都是非常重要的一个功能,当然如果我们是找传奇一条龙来做服务器他们都会给我们做好,但是大多数时候我们需要自己进行相关设置。对于这样的情况小地图的相关制作就变成了一件相对比较困难的事情,因为大多数时候我们的服务器都会增加一些…

做挂第一步:如何找基址(以热血传奇为例)

如何找热血传奇基址&#xff1f; 一&#xff0e;首先打开游戏并使用CE加载游戏进度。 二&#xff0e;在数值中输入血量值207,点击新的扫描&#xff0c;扫描类型选择精确数值&#xff0c;如图所示&#xff1a; 为什么要输入207呢&#xff1f;这是指游戏中人物的当前血量&#…