C语言中宏,typedef以及const

程序运行的几个时期:

预处理  先处理带#号的文件
编译  先检查代码是否有错误 检查语法
汇编  把高级语言转换为汇编语言
链接  把汇编语言转换为二进制语言

宏是由预处理器处理的一种文本替换机制,通过 #define 关键字定义。宏可以用来定义常量、简化复杂表达式或函数调用等。宏是在编译之前进行替换的,因此它们并不占用运行时的内存。

宏是单纯的替换
位置:主函数里面和外面都可以
#define + 宏的名字 + 替换的内容

#include<stdio.h>
//语法:#define + 宏的名字 + 替换的内容
#define AA printf("HELLO\n")// 一般后面不加分号
#define  B int* 
#define speed 100// 便于更改数值
    
#define true 1
#define false 0
typedef int bool;  // 自定义bool类型
int main()
{
	AA;
	B a,b;// 注意a是int*类型 b是int类型 相当于:int* a,b;
	return 0;
}
  • 带参数的宏

示例:

#include<stdio.h>
#define A(a,b) a+b// 加法
#define B(a,b) a*b// 乘法
#define C(a,b) (a)*(b)// 乘法
#define ARR(a) sizeof(a)/sizeof(a[0])// 计算任意数组的大小
int main()
{
	printf("%d\n", A(3,5));
	printf("%d\n", B(3,5));
	printf("%d\n", B(3+6,3+5));//相当于3+6*3+5
	//要想求(3+6)*(3+5) 则定义宏的时候要注意加()
	printf("%d\n", C(3 + 6, 3 + 5));
	int arr1[5] = { 0 };
	char arr2[9] = { 0 };
	printf("%d\n", (int)ARR(arr1));
	printf("%d\n", (int)ARR(arr2));

	return 0;
}
  • typedef

用于为现有的类型定义一个新的类型名称。它可以使代码更加简洁和易读,特别是对于复杂的类型。

语法:typedef + 类型 +别名

示例:

#include<stdio.h>
// 给已经存在的类型起一个别名
// typedef + 类型 +别名
typedef unsigned int UINT;
typedef int* AA;
typedef int A[5];
int main()
{
	unsigned int b;
	UINT b;//UINT就是unsigned int类型
	AA a, b;// 注意 此时a和b都是int*类型
	A a;// a是数组类型 大小为5
	return 0;
}
  • const

const 关键字用于定义常量。它可以应用于变量、指针和函数参数,表示这些数据在程序运行过程中不会被改变

示例:

#include<stdio.h>
int main()
{
	int const a;// 没有意义
	// const修饰的变量必须要初始化
	int const b = 100;// 把B变成一个常量 使得b不可被修改
   //  b=200// b报错 b为常量

	int c = 10;
	const int* p = &c;
	//p = &a;              //但p可以用来存a的地址
	//*p = 10;// const在*左边 不能通过指针来修改值的内容
	int* const p1 = &c;
	//p1 = &b;//const在*的右边 p1只能用来存储c的地址
	//*p1 = 10;//能通过指针来修改值的内容
	const int* const p2 = &c;
	//p2 = &b;//const在*的两边时 p2只能用来存储c的地址
	//*p2 = 10;//也不能能通过指针来修改值的内容
	

	return 0;
}

区别与联系

  • :在预处理阶段进行文本替换,没有类型检查,可以定义常量、表达式或函数宏。
  • typedef:用于定义类型别名,使代码更简洁易读,适用于所有类型。
  • const:用于定义不可修改的常量,可以应用于变量、指针、函数参数等,保证数据在运行时不会被改变。
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值