#define 以及##

简介: #define 以及##

define定义标示符

define定义标示符就是将一个名称起一个别名,在程序运行之前使用别名将原来的名字替换掉,从而达到简化代码书写的作用

define的语法

define name stuff

name是别名,stuff是原本的名称

define NUM 120

define STR "abcdef"

int main()
{

printf("%d\n", NUM + 10);
printf("%s", STR);
return 0;

}
复制代码
image-20220409213341935

其实#define就是将NUM 和 STR 简单的进行了转换,再进行计算即可

define也可以将复杂的符号进行简单的替换

define reg register //将register改名为reg

int main()
{

//register int a = 0;//  定义一个寄存器变量a
reg int a = 0;
return 0;

}
复制代码
注意:#define 后面最好不要加上分号,避免不必要的错误

define定义宏

宏的声明方式
define name( parament-list ) stuff

其中的parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中。

define只是进行了简单的替换,并不会进行运算

define ADD(x) x+x

define MUL(x) x*x

int main()
{

int ret = ADD(2);
printf("%d\n", ret1);
  
int ret2 = MUL(3);
printf("%d\n", ret2);

int ret3 = MUL(2 + 3);
printf("%d\n", ret3);
return 0;

}
复制代码
ret1 的结果就是2+2=4

ret2的结果就是3*3=9

ret3的结果是11,为什么不是25?就是因为#define不会进行运算,只是简单的替换,所以是2+3*2+3=11

要是想要得到25就要加上括号,严格规定优先级顺序

define MUL(x) (x)*(x)

int main()
{

int ret3 = MUL(2 + 3);
printf("%d\n", ret3);
return 0;

}
复制代码
使用#define宏定义时,如果不注意就会发生错误,所以在宏定义的时候要多加括号,严格规定优先级的顺序

和 ##的作用

是将字符拼接在字符串中

define PRINT(n,format) printf("the value of "#n" is "#format"",n)

int main()
{

int a = 10;
PRINT(a, "%d");

return 0;

}

复制代码

是将两边的符号连接起来,成为一个符号

define TYPE(class,num) class##num

int main()
{

int class105 = 100;
printf("%d", TYPE(class, 105));

}
//打印结果就是100

目录
相关文章
|
关系型数据库 MySQL 索引
【MySQL 解析】Hash索引和B+树索引对比分析
【1月更文挑战第11天】【MySQL 解析】Hash索引和B+树索引对比分析
|
10月前
|
监控 数据可视化 关系型数据库
Dify: 一款宝藏大模型开发平台: 部署及基础使用
Dify 是一款开源的大语言模型(LLM)应用开发平台,融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使非技术人员也能参与 AI 应用的定义和数据运营。计算巢提供了 Dify 的快速部署解决方案,包括单机版和高可用版,支持通过 Docker Compose 和阿里云 ACK 部署,适用于开发测试和生产环境。用户可以通过配置 API、WebApp 脚手架等轻松集成 Dify 到业务中,极大简化了大语言模型应用的开发流程。
6031 22
Dify: 一款宝藏大模型开发平台:  部署及基础使用
|
10月前
|
消息中间件 人工智能 搜索推荐
《主动式智能导购AI助手构建》解决方案评测
一文带你了解《主动式智能导购AI助手构建》解决方案的优与劣
263 17
|
消息中间件 物联网 Kafka
消息队列 MQ产品使用合集之QoS 1与QoS 2的主要区别有哪些
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
存储 Serverless 数据库
OceanBase索引优化
【8月更文挑战第14天】OceanBase索引优化
343 5
|
测试技术 编译器 Go
依赖注入与控制反转:优化Go语言REST API客户端
依赖注入与控制反转:优化Go语言REST API客户端
|
数据库连接
java+ssm+vue代码视频学习讲解
java+ssm+vue代码视频学习讲解
70 0
|
JavaScript 前端开发 Android开发
android开发,使用kotlin学习WebView(详细)
android开发,使用kotlin学习WebView(详细)
784 0
|
算法 调度
FreeRTOS入门教程(互斥锁的概念和函数使用)
FreeRTOS入门教程(互斥锁的概念和函数使用)
867 0
css3条纹边框效果
在线演示 本地下载
1160 121