C语言--常量和宏--入门

常量&宏

define定义标识符常量

#define MAX 10000

define定义宏

#define ADD(X,Y)  X+Y
int main()
{
	printf("%d\n",ADD(2,3));//打印结果为5
	printf("%d\n",4*ADD(2,3));//打印结果为11  4传递给了2 -->4*2+3
	return 0;
}

想要上面打印出20需要将

#define ADD(X,Y)  X+Y //改成	#define ADD(X,Y)  ((X)+(Y))

在 C 语言中,可以采用命令 #define 来定义宏。该命令允许把一个名称指定成任何所需的文本,例如一个常量值或者一条语句。在定义了宏之后,无论宏名称出现在源代码的何处,预处理器都会把它用定义时指定的文本替换掉。
没有参数的宏定义,采用如下形式:

#define 宏名称 替换文本

“替换文本”前面和后面的空格符不属于替换文本中的内容。替代文本本身也可以为空。下面是一些示例:

 #define TITLE "*** Examples of Macros Without Parameters ***"
 #define BUFFER_SIZE (4 * 512)
 #define RANDOM (-1.0 + 2.0*(double)rand() / RAND_MAX)

标准函数 rand()返回一个伪随机整数,范围在 [0,RAND_MAX] 之间。rand()的原型和 RAND_MAX 宏都定义在标准库头文件 stdlib.h 中。
一个简单的例子:(只是简单的了解一下后续再深入)

 #include <stdio.h>
 #include <stdlib.h>
 /* ... */
 // 显示标题
 puts( TITLE );
 // 将流fp设置成“fully buffered”模式,其具有一个缓冲区,
 // 缓冲区大小为BUFFER_SIZE个字节
 // 宏_IOFBF在stdio.h中定义为0
 static char myBuffer[BUFFER_SIZE];
 setvbuf( fp, myBuffer, _IOFBF, BUFFER_SIZE );
 // 用ARRAY_SIZE个[-10.0, +10.0]区间内的随机数值填充数组data
 for ( int i = 0; i < ARRAY_SIZE; ++i )
   		data[i] = 10.0 * RANDOM;

用替换文本取代宏,预处理器生成下面的语句:

puts( "*** Examples of Macros Without Parameters ***" );
static char myBuffer[(4 * 512)];
setvbuf( fp, myBuffer, 0, (4 * 512) );
for ( int i = 0; i < 100; ++i )
		data[i] = 10.0 * (-1.0 + 2.0*(double)rand() / 2147483647);

带参的宏
带参宏定义的一般形式为 #define 宏 名(形参表) 字符串

带参宏调用的一般形式为:宏 名(实参表);

#define M(X,Y) ((X)*(Y))     /*宏定义*/

k=M(5,3);       /*宏调用*/

而且宏名和形参表之间不能有空格,例如

#define M(X,Y) ((X)*(Y))    //正确
#define M (X,Y) ((X)*(Y))   //错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值