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

news2025/1/16 20:03:58

文章目录

  • 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 并赋值为 1
    a++;
    printf("%d ", a);//打印2
}
//出了作用域之后 a 的生命周期结束,将变量 a 销毁;
//不会保存 a++ 之后的值 2

int 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 1000

int 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.coloradmin.cn/o/678531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SD/StableDiffusion模型,ai绘画部署教程,谷歌云端零成本部署,支持中文

目录 前言 准备前提 说明 开始搭建 1、第一步&#xff0c;下载ipynb脚本文件 2、第二步&#xff0c;上传一键脚本文件到谷歌云盘 3、选择该.ipynb文件--右键--打开方式--关联更多应用 4、输入框搜索Colaboratory找到该应用&#xff0c;安装 5、安装过程中&#xff0c;…

chatgpt赋能python:Python的pow()函数-实现快速幂运算

Python的pow()函数 - 实现快速幂运算 Python是一门高级编程语言&#xff0c;具有简单易学、功能强大、代码可读性高等特点。在Python的内置函数中&#xff0c;有一个很有用的函数叫做pow()。pow()函数可以对数字进行快速幂运算&#xff0c;其实现方法很简单&#xff0c;但是在…

chatgpt赋能python:Python画轨迹图:认识、用法与优势

Python画轨迹图: 认识、用法与优势 Python的数据可视化能力十分强大。画图工具虽然千千万&#xff0c;但其中&#xff0c;轨迹图是同时准确又美观的图形表现。本文将向读者介绍Python画轨迹图的好处、如何使用以及如何在项目合适的地方使用轨迹图。 了解Python轨迹图 为了更…

chatgpt赋能python:Python绘制波浪线教程

Python绘制波浪线教程 Python是一种高级编程语言&#xff0c;它广泛应用于各种领域&#xff0c;如数据分析、Web开发、自动化操作以及人工智能等等。在这篇文章中&#xff0c;我们将介绍如何使用Python来绘制漂亮的波浪线。 简介 绘制波浪线是一种在艺术设计、信息图表、数据…

MySQL压测实战

写作目的 最近看到一句话是MySQL的TPS是4000&#xff0c;这句话是不严谨的&#xff0c;因为没有说服务器的配置。所以自己买了个服务器做了一个压测。希望自己对数据有一个概念。 注意&#xff1a;服务器不同结果不同&#xff0c;结果不具有普适性。 服务器配置 配置参数CPU…

MySQL数据库操作篇2(表的增删查改约束)

在数据类型那篇文章里&#xff0c;笔者曾经提到过约束条件&#xff0c;但也只是简单的提了提&#xff0c;并没有展开来说&#xff0c;约束条件是MySQL为确保数据正确性&#xff0c;安全性&#xff0c;以及倒逼程序员规范操作的一大利器&#xff0c;这篇文章笔者详细谈谈有哪些约…

0019-TIPS-2019-tokyowesterns-gnote : switch(jump) Doubule Fetch

漏洞源码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/proc_fs.h> #include <linux/string.h> #include <linux/slab.h> #include <asm/uaccess.h>…

chatgpt赋能python:Python绘制车辆轨迹图

Python绘制车辆轨迹图 在现代交通中&#xff0c;车辆轨迹图是一个广泛应用的技术&#xff0c;它可以被用于道路交通管理&#xff0c;行车安全评估等领域。Python是一种强大的编程语言&#xff0c;它提供了许多绘制数据可视化图表的库。本文将介绍如何使用Python和Matplotlib库…

10.事务消息

4.6 事务消息 4.6.1 流程分析 上图说明了事务消息的大致方案&#xff0c;其中分为两个流程&#xff1a;正常事务消息的发送及提交、事务消息的补偿流程。 1)事务消息发送及提交 (1) 发送消息(half消息)。 (2) 服务端响应消息写入结果。 (3) 根据发送结果执行本地事务(如果写入失…

Golang -> Go 语言快速开发入门

Go 语言快速开发入门 开发一个 hello.go 程序Golang 执行流程分析两种执行流程的方式区别:编译和运行说明 Go 程序开发的注意事项注释行注释多行注释 开发一个 hello.go 程序 package mainimport "fmt"func main() {fmt.Print("hello") }输出: hello对上图…

Cesium 入门

文章目录 一、了解 Cesium二、创建第一个 Cesium 地球三、案例1. Cesium 查看器、场景、实体、数据源介绍2. Cesium 的坐标与转换3. Cesium 相机系统方法一&#xff1a;setView方法二&#xff1a;flyTo方法三&#xff1a;lookAt方法四&#xff1a; viewBoundingSphere 四、案例…

【Leetcode60天带刷】day27回溯算法——39. 组合总和,40.组合总和II,131.分割回文串

​ 题目&#xff1a; 39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一…

Redis 实战:逐步指南,让你轻松在 Linux 上安装与部署

目录 前言为什么会出现 Redis&#xff1f;磁盘、内存数据库缓存中间件 安装Redis5Redis6 使用总结 前言 Redis 中文网站&#xff1a;http://redis.cn/ Redis 是一个开源&#xff08;BSD 许可&#xff09;的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库…

【编译、链接、装载十二】动态链接2

【编译、链接、装载十二】动态链接2 四、延迟绑定&#xff08;PLT&#xff09;五、动态链接相关结构1 “.interp”段2 “.dynamic”段3 .动态符号表——dynsym、动态符号字符串表——.dynstr4、动态链接重定位表 六、动态链接的步骤和实现1、动态链接器自举2、装载共享对象3、重…

2.10 高性能异步IO机制:io_uring

一、io_uring的引入 为了方便说明io_uring的作用&#xff0c;先举一个通俗点的例子 1、通过异步提高读写的效率 假设有一批数量很大的货&#xff0c;需要分批次运到厂里处理。这个时候就有两种方式&#xff1a; 1&#xff09;同步方式&#xff1a;运送一批到厂里&#xff0c…

TypeScript ~ TS 掌握编译文件配置项 ④

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

初识EasyX图形库

EasyX图形库 1. EasyX是什么&#xff1f;2. 入手EasyX3. EasyX函数介绍创建和关闭绘图窗口操作initgraphclosegraph 设置绘图背景setbkcolorcleardevice 画图形circlefillcirclerectanglefillrectangle 图形颜色及样式设置setfillcolorsetlinecolorsetbkcolorsetbkmodesetlines…

计算物理专题:有限差分法解决本征值问题

计算物理专题&#xff1a;有限差分法解决本征值问题 定态薛定谔方程差分形式 一维定态薛定谔方程 谐振子 解法代码 import numpy as np def householder(symmetric_matrix):M symmetric_matrixassert np.allclose(M,M.T),"matrix is not symmetric"N len(M)for …

chatgpt赋能python:用Python分析电影评分数据

用Python分析电影评分数据 Python是一种流行的数据分析和可视化工具&#xff0c;它可以让我们更深入地了解电影的评分数据。在本文中&#xff0c;我们将使用Python来分析一些电影评分数据&#xff0c;并试图找出一些有趣的模式和趋势。 数据来源 我们将使用公共数据集IMDb电…

第4章 网络层

1‌、下列关于路由算法描述错误的是&#xff08; &#xff09; A. 链路状态算法是一种全局路由算法&#xff0c;每个路由器需要维护全局状态信息B. OSPF 是一种域内路由协议&#xff0c;核心是基于 Dijkstra 最低费用路径算法C. RIP 是一种域内路由算法&#xff0c;核心是基…