define是什么意思

更新时间:2022-12-27 12:52:15 阅读: 评论:0


2022年12月27日发(作者:唇部保养)

defined在c语⾔中的作⽤,c语⾔defined的⽤法

C语⾔中的#define命令在使⽤过程中的常见问题,分析了问题产⽣的原因并提出了解决⽅法,从编译程序对C源程序的处理过程阐述宏展开的

时机,⼒求从根本上对宏定义进⾏阐述,并在最后指出使⽤宏定义的优点,以促使对宏定义使⽤的重视。下⾯⼩编就跟⼤家介绍下c语⾔

defined的⽤法。

1.简单的宏定义

#define标识符替换列表(替换列表可以是数,字符串字⾯量,标点符号,运算符,标识符,关键字,字符常量。注意:替换列表是可以为

空的)

典型错误:

#defineN=100

inta[N];/*这样会成为inta[=100],这⾥会处理成为⼀种标识记号⼀样*/

#defineN100;

inta[N];/*带分号的定义会成为inta[100;],这是⼀种很常见的错误*/

#definepin(int*);

pina,b;

int*a,b;/*本意是a和b都是int型指针,但是实际上变成int*a,b;a是int型指针,⽽b是int型变量。这是应该使⽤typedef来代替define,这

样a和b就都是int型指针了。*/

典型的使⽤⽅法:

使⽤宏定义我们可以⾃⼰根据⾃⼰的习惯来定义甚⾄改变C语⾔的语法习惯,例如:

#defineBEGIN{

#defineEND}

intmain()BEGIN

printf("DEFINE----n");

END

定义⼀个循环

#defineLOOPfor(;;)

重新定义数据类型

#defineITint

2.带参数的宏

#define标识符(x1,x2,x3...xn)替换列表(注意:x1,x2,x3..是宏的参数,标识符和其左括弧之间不能有空格)

使⽤⽅法:

#defineMAX(x,y)((x)>(y)?(x):(y))

i=MAX(j+k,m-n);

替换为:

i=MAX((j+k)>(m-n)?(j+k):(m-n));

#defineSI_EX(n)((n)%2==0)

if(SI_EX(i))i++;

替换为:

if(SI_EX((i)%2==0))

通过以上例⼦我们可以看出,标识符带参数(X1,X2,X3.....)在替换时会被替换列表(Y1,Y2,Y3....)对应的替换,但是和顺序⽆关。

3.宏的特殊单⾏定义

#defineA(x)T_##x

#defineB(x)#@x

#defineC(x)#x

x=1

替换为:

A(1)------>T_1(T_##x,##符号是记号粘黏符号,将前后的字符粘黏起来。)

B(1)------>'1'(#@x,#@符号会将宏的参数进⾏字符串字⾯量化,并且加‘’号)

C(1)------>"1"(#x,#符号会将宏的参数进⾏字符串字⾯量化,并且加""号)

的多⾏定义

define可以替代多⾏的代码,在每⼀个换⾏的时候加上⼀个""

#defineMAX(X,Y)do{

语句1;

语句2;

/*注释的写法*/

}while(0)/*(notrailing;)*/

5.在⼤规模的开发过程中,特别是跨平台和系统的软件⾥,define最重要的功能是条件编译。

#ifdefWINDOWS

......

......

#endif

#ifdefLINUX

......

......

#endif

可以在编译的时候通过#define设置编译环境

6.取消宏

#undef标识符

7.条件编译

#ifdefXXX…(#el)…#endif

8.预定义宏

在C语⾔中收录了⼀些有⽤的宏,这些宏是提供当前编译信息的。

__LINE__被编译⽂件的⾏数

(整型)

__FILE__被编译⽂件的名字(字符型)

__DATE__编译⽇期(字符型)

__TIME__编译时间(字符型)

__STDC__如果编译器接受标准C,那么值为1.(整型)

通常我们在编译的时候我们可以⽤这些预定义的宏来进⾏排错,例如:

⼀般情况下,当出现除零的情况时编译器是没有提⽰的,我们可以⾃定义⼀个解决办法。

#defineCHECKZERO(divisor)

if(divisor==0)

printf("***ATTEMPTTODIVIDEBYZEROINLINE%doffile%s***n",__LINE__,__FILE__);

引⽤⽅法

CHECKZERO(j);

k=i/j;

本文发布于:2022-12-27 12:52:15,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/40422.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:exoplanet
下一篇:shave
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图