设为首页 - 加入收藏
您的当前位置:主页 > 时尚 > 本文地址:http://www.duitang.net.cn/shishang/2019/5234.html

C语言define的用法C语言宏定义

时间:2019-10-24 来源:(原创/投稿/转载) 编辑:联络员

  是宏的内容(宏所表示的字符串)。在预处理阶段,对程序中所有出现的“宏名”,预处理器都会用宏定义中的字符串去代换,这称为“宏替换”或“宏展开”。

  程序的开头首先定义了一个宏 M,它表示 (n*n+3*n) 这个表达式。在 9 行代码中使用了宏 M,预处理程序将它展开为下面的语句:sum=3*(n*n+3*n)+4*(n*n+3*n)+5*(n*n+3*n);需要注意的是,在宏定义中表达式(n*n+3*n)两边的括号不能少,否则在宏展开以后可能会产生歧义。下面是一个反面的例子:#difine M n*n+3*n在宏展开后将得到下述语句:s=3*n*n+3*n+4*n*n+3*n+5*n*n+3*n;这相当于:3n2+3n+4n2+3n+5n2+3n这显然是不正确的。所以进行宏定义时要注意,应该保证在宏替换之后不发生歧义。对 #define 用法的几点说明1) 宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单粗暴的替换。字符串中可以含任何字符,它可以是常数、表达式、if 语句、函数等,预处理程序对它不作任何检查,如有错误,只能在编译已被宏展开后的源程序时发现。

  该例中定义宏名 OK 表示 100,但在 printf 语句中 OK 被引号括起来,因此不作宏替换,而作为字符串处理。

  7) 可用宏定义表示数据类型,使书写方便。例如:#define UINT unsigned int在程序中可用 UINT 作变量说明:UINT a, b;应注意用宏定义表示数据类型和用typedef定义数据说明符的区别。宏定义只是简单的字符串替换,由预处理器来处理;而 typedef 是在编译阶段由编译器处理的,它并不是简单的字符串替换,而给原有的数据类型起一个新的名字,将它作为一种新的数据类型。

  下面用 PIN1,PIN2 说明变量时就可以看出它们的区别:PIN1 a, b;在宏代换后变成:int * a, b;表示 a 是指向整型的指针变量,而 b 是整型变量。然而:PIN2 a,b;表示 a、b 都是指向整型的指针变量。因为 PIN2 是一个新的、完整的数据类型。由这个例子可见,宏定义虽然也可表示数据类型, 但毕竟只是简单的字符串替换。在使用时要格外小心,以避出错。

栏目分类

本网转载作品的目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。

如涉及作品内容、版权等问题,请联系我们进行修改或删除!联系我们-

Top