宏与预处理

#include <stdio.h>
#define C
#define Max(x, y) (x > y ? x:y)
int main(void)
{
#ifndef _def
#define _def
	int c;   //把c的定义用保护宏保护起来
#endif
#ifdef _def     //相当于判断变量c是否定义
	printf("%d\n ", Max(2, 4));
#endif
	return 0;
}

上面程序是判断程序中变量c是否存在,本来想用

int c;
#if c
	printf("%d\n", Max(2, 4));
#endif


代替上面的

#define _def
	int c;   //把c的定义用保护宏保护起来
#endif
#ifdef _def     //相当于判断变量c是否定义
	printf("%d\n ", Max(2, 4));
#endif


编译没有问题,但是也得不出结果。后来一位网友告诉了我上面的方法,并了解了#if 后面只能接表达式,且表达式应为常量。

Note: 用#define定义宏函数时,应注意,宏只是将函数中的参数简单的替换成后面的函数,如

#define S(x, y)  x*y
int a = 2, b = 3, c;
c = S(a, b);


这样是没错的。可是如果是

c = S(a+1, b+1);


这样输出的结果就会出错,因为宏中只是简单的替换,并没有在传实参是进行相应的计算,上式实际是

c = a + 1 * b + 1;


 


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值