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

本文介绍了C语言中的typedef关键字用于简化类型名称,以及static关键字在修饰局部变量、全局变量和函数时的不同作用。static使得局部变量在函数调用间保持状态,限制全局变量的作用域,以及隐藏函数。此外,还讨论了#define用于定义常量和宏的功能。
摘要由CSDN通过智能技术生成

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值