首页 > 其他分享 >#define 以及##

#define 以及##

时间:2022-12-12 10:31:22浏览次数:35  
标签:return 以及 ## int printf MUL main 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;
}
复制代码

#define 以及##_#define

其实#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

标签:return,以及,##,int,printf,MUL,main,define
From: https://blog.51cto.com/u_15308610/5929155

相关文章

  • 即时通讯开发之基于RTMP数据传输协议的实时流媒体技术
    近年来,随着网络带宽的提升,以及多媒体压缩编码技术的发展,流媒体技术得到了非常广泛的应用。全球的流媒体市场正在以极高的速度向前发展,并逐步取代了以文本和图片为主的传......
  • wordpress目录结构,数据表
    1,Wordpress目录结构1,根目录1.index.php:wordpress核心索引文件,即博客输出文件。2.license.txt:WordPressGPL许可证文件。3.my-hacks.php:定义了博客输出之前处理的追加......
  • JUC同步工具CountDownLatch
    CountDownLatch:允许一条或多条线程等待其它线程中的一组操作完成后再继续执行。 在探究CountDownLatch之前,我们知道Thread的join也有类似功能,先看thread的join方法:1......
  • 关于ueditor的一些记录
    1、一些修改的方法去ueditor.all.js中找2、修改行间距的实例如下varue=UE.getEditor('content',{zIndex:"0",initialFrameWidth:......
  • 初探极限符号表示形式之优劣
    对于数列极限定义1,其中我们着重来看$\lim_{n\rightarrow\infty}\mspace{2mu}a_{n}=a$,这是大多数教材通常采用的对极限现象的符号代表形式,为了进一步了解极限的性质及......
  • 在 Mac 上使用“磁盘工具”创建磁盘映像
    在Mac上使用“磁盘工具”创建磁盘映像你可以使用“磁盘工具”创建磁盘映像,磁盘映像是一个包含其他文件和文件夹的文件。【注】你可以在“访达”中使用“刻录”命......
  • 上周热点回顾(12.5-12.11)
    热点随笔:· 这玩意也太猛了!朋友们,我在此严正呼吁大家:端好饭碗,谨防AI! (why技术)· ChatGPT会开源吗? (削微寒)· 用最少的代码打造一个Mini版的gRPC框架 (Artech)·......
  • centos7安装配置rocketmq
    1、下载地址::https://rocketmq.apache.org/download/参考地址:https://www.cnblogs.com/jtnote/p/16315320.html ......
  • 启明智显分享:SSD201/202开发环境搭建
    SSD201/202开发环境搭建1、下载源码,并将源码拷贝到linux目录下。2、安装交叉编译链(1)解压gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf.tar.gztar-xvfgcc-arm......
  • kestrel网络编程--开发redis服务器
    1文章目的本文讲解基于kestrel开发实现了部分redis命令的redis伪服务器的过程,让读者了解kestrel网络编程的完整步骤,其中redis通讯协议需要读者自行查阅,文章里不做具体解......