2021-05-15 对C语言关键字、宏定义的理解

对C语言关键字、宏定义的理解

C语言关键字

C常见关键字

auto , break , case, char , const , continue , default , do , double , else , enum , extren , float , for , goto , if , int , long , register , return , short , signed , sizeof , static , struct , switch , typedef , union , unsigned , void , volatitle , while

关键字typedef

typedef顾名思义是类型定义,这里应该理解为类型重命名
例如:

//将unsigned int 重命名为uint_32,所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
	//观察num1和num2,这两个变量类型是一样的
	unsigned   int   num1   =   0;
	uint_32   num2  =  0;
	rreturn 0;
}

使用 typedef 的注意事项:
1、typedef 不可滥用、乱用
比如:

typedef  int  i;
int main()
{
	//这样的“简化”很鸡肋,会让代码可读性大幅度降低。
	int i = 0;
	i   j = 0;
	return 0;
	
}

2、typedef 常用来定义结构体
比如:

typedef struct Student
{
	chat name[20];
	int age;
	char sex[5];
	double weight;
}stu;
int main()
{
	//以下两种方式定义结构体效果相同,但第二种明显方便
	struct Student tom;
	stu jack;
	return 0;
}

关键字static

在C语言中:
static 是用来修饰变量和函数的
修饰局部变量–静态局部变量
修饰全局变量–静态全局变量
修饰函数–静态函数

修饰局部变量

//代码1
#include <stdio.h>
void test()
{
	int i =0;
	i++;
	printf("%d ",i);
}
int main()
{
	int i=0;
	for(i=0;i<10;i++)
	{
		test();
	}
	//结果是:1 1 1 1 1 1 1 1 1 1
	return 0;
}
//代码2
#include <stdio.h>
void test()
{
	//static 修饰局部变量
	static int i =0;
	i++;
	printf("%d ",i);
}
int main()
{
	int i=0;
	for(i=0;i<10;i++)
	{
		test();
	}
	//结果是:1 2 3 4 5 6 7 8 9 10
	return 0;
}

结论:
static修饰局部变量,将该变量的生命周期改为全局,但作用域不变

修饰全局变量

//代码1
//add.c文件内定义全局变量
int g_val = 2021;
//test.c文件内引用add.c文件内的全局变量
//声明
extern int g_val;
int main()
{
	printf("%d\n",g_val);//2021
	return 0;
}
//代码2
//add.c文件内定义全局变量
static int g_val = 2021;
//test.c文件内引用add.c文件内被static修饰全局变量
//声明
extern int g_val;
int main()
{
	printf("%d\n",g_val);//报错
	return 0;
}

结论:
1、全局变量:在整个程序内有效
2、static修饰全局变量之后,代表该变量只在定义文件内有效,只能在本文件内被使用,不能在其他文件内被使用。

修饰函数

//代码1
//add.c文件内定义函数
int add(int x,int y)
{
	return x+y;
}
//test.c文件内引用add.c文件内的函数
int main()
{
	printf("%d",add(2,3));//5
	return 0;
}
//代码2
//add.c文件内定义函数
static int add(int x,int y)
{
	return x+y;
}
//test.c文件内引用add.c文件内被static修饰的函数
int main()
{
	printf("%d",add(2,3));
	//编译时出现连接性错误
	return 0;
}

结论:
一个函数被static修饰,说明这个函数只在本文件内有效,不能在其他源文件内使用

注:剩余关键字今后学习到会再补充

define 定义常量和宏

主要特点:
便于后期代码维护

//define 定义标识符常量
#define MAX 1000

简要说明:
宏定义的常量名通常采用全大写的命名方式,并且做到见名知义的效果

//define 定义宏
#define ADD1(X,Y) ((X)+(Y))
#define ADD2(X,Y) X+Y

简要说明:
宏替换:ADD1(x,y) ((x)+(y))
1、命名方式及要求与常量一致
2、x,y是两个占位符号,在引用宏时用户输入的对应数据替换x,y
比如;
ADD1(2,3):2->x,3->y,((2)+(3))->((x)+(y))
3、int num = 10ADD2(2,3):
对于这个表达式来说我们预期得到的结果是50;但实际结果是23
替换过程如下:
num = 10
2+3
注意:在定义宏的时候,对于每一个元素都应该带上圆括号来保证我们程序的正确性!规范写法:ADD(x,y) ((x)+(y))
不要吝啬圆括号的使用~~~

小试牛刀

//define 定义标识符常量
#define MAX 1000
//define 定义宏
#define ADD(X,Y) ((X)+(Y))

#include<stdio.h>
int main()
{
	int sum = ADD(2,3);
	printf("%d\n",sum);//5
	sum = 10*ADD(2,3);//50
	printf("%d\n",sum);
	return 0;
}
  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suk-god

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值