c语言---define用法总结

 时间:2024-10-17 23:26:24

C语言中的宏定义对于C语言的可读性具有重要意义,下面从基本概念等一些方面介绍define的一些用法。

工具/原料

C语言

方法/步骤

1、概念#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。(1)简单的宏定义:#define<宏名>  <字符串>例:#definePI3.1415926(2)带参数的宏定义#define<宏名>(<参数表>)<宏体>

c语言---define用法总结

2、常见问题总结为了能清楚的理解问题,首先说一下C语言的编译过程。c语言的编译经过预处理、编译、汇编、连接,而宏定义在预处理阶段生成,此过程只是纯粹的替换和展开没有任何计算(这个是关键)。(1)下面一段带来,请写出其输出其结果#defineN3+3voidmain(){inttemp=N*N;printf(“%d”,temp);}分析:展开是在预处理阶段完成的,这个阶段把替换文本只是看作一个字符串,并不会有任何的计算发生,在展开时是在宏N出现的地方只是简单地使用串3+3来代替N,并不会增添任何的符号,所以对该程序展开后的结果是temp=3+3*3+3,计算后=15,这就是宏替换的实质

c语言---define用法总结

3、(3)带参数的宏定义#definearea(x)x*xvoidmain(){inty=area(2+2);printf(“%d”,y);}按理说给的参数是2+2,所得的结果应该为4*4=16,但是错了,因为该程序的实际结果为8,仍然是没能遵循纯粹的简单替换的规则,又是先计算再替换了,在这道程序里,2+2即为area宏中的参数,应该由它来替换宏定义中的x,即替换成2+2*2+2=8了形式参数不能用带引号的字符串替换。但是,如果在替换文本中,参数名以#作为前缀则结果将被扩展为由实际参数替换此实际参数的带引号的字符串。例如,可以将它与字符串连接运算结合起来编写一个调试打印宏:#definedprint(expr)printf(#expr“=%\n”,expr)使用语句dprint(x/y);调用宏时,该宏将被扩展为:printf(“x/y”“=%\n”,x/y);其中的字符串被连接起来了,这样便等价于printf(“x/y=%\n”,x/y);在实际参数中,每个双引号“将被替换为\”;反斜杠\将被替换为\\,因此替换后的字符串是合法的字符串常量。预处理运算符##为宏扩展提供了一种连接实际参数的手段。如果替换文本中的参数与##相邻,则该参数将被实际参数替换,##与前后的空白符将被删除,并对替换后的结果重新扫描。例如,下面定义的宏paste用于连接两个参数#definepaste(front,back)front##back因此,宏调用past(name,1)的结果将建立记号name1.

c语言---define用法总结

东方归言录如何提升好感度 PS软件如何合并图层 PS如何设计太阳卡通创意图片 在ps2019中给图片添加水平颗粒纹理特效 化妆品banner设计教程
热门搜索
饺子图片大全 怎么改图片尺寸 东北农村图片 天才宝贝动漫 武汉黄鹤楼图片