#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;