c语言defined的用法.docx
c语言defined的用法C语言中的#define命令在使用经过中的常见问题,分析了问题产生的原因并提出了解决方法,从编译程序对C源程序的处理经过阐述宏展开的机会,力求从根本上对宏定义进行阐述,并在最后指出使用宏定义的优点,以促使对宏定义使用的重视。下面我就跟大家介绍下c语言defined的用法。1.简单的宏定义#define标识符替换列表(替换列表能够是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量。注意:替换列表是能够为空的)典型错误:#defineN=100intaN;/*这样会成为inta=100,这里会处理成为一种标识记号一样*/#defineN100;intaN;/*带分号的定义会成为inta100;,这是一种很常见的错误*/#definepin(int*);pina,b;int*a,b;/*本意是a和b都是int型指针,但是实际上变成int*a,b;a是int型指针,而b是int型变量。这是应该使用typedef来代替define,这样a和b就都是int型指针了。*/典型的使用方法:使用宏定义我们能够本人根据本人的习惯来定义甚至改变C语言的语法习惯,例如:#defineBEGIN#defineENDintmain()BEGINprintf(DEFINE-nEND定义一个循环#defineLOOPfor(;)重新定义数据类型#defineITint2.带参数的宏#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)#xx=1替换为:A(1)-T_1(T_#x,#符号是记号粘黏符号,将前后的字符粘黏起来。)B(1)-1(#x,#符号会将宏的参数进行字符串字面量化,并且加号)C(1)-1(#x,#符号会将宏的参数进行字符串字面量化,并且加号)4.define的多行定义define能够替代多行的代码,在每一个换行的时候加上一个#defineMAX(X,Y)do语句1;语句2;/*注释的写法*/while(0)/*(notrailing;)*/5.在大规模的开发经过中,十分是跨平台和系统的软件里,define最重要的功能是条件编译。#ifdefWINDOWS.#endif#ifdefLINUX.#endif能够在编译的时候通过#define设置编译环境6.取消宏#undef标识符7.条件编译#ifdefXXX(#else)#endif8.预定义宏在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;