define预处理以及宏定义

define的定义方式

无参一般形式:#define 标认符 字符串                     比如:#define COUTD "%d\n"

带参一般形式:#define 宏名(形参表) 字符串             比如:#define M2(a,b) ((a>b)?a:b)

#include <stdio.h>
/*宏定义的注意事项(1)不建议过多的使用宏定义来处理运算,原因是运算符表达式的优先级很容易被搞混,代码优化困难*/
/*预处理在windowsapi中很常见,会预处理很多文件,也在单片机中广泛的使用*/
#define OSTR1 0
#define OSTR2 0
#define IF_ALL_STAST(STAST) ((STAST==GP01)||(STAST==GP02)||(STAST==GP03))  //比较常用的预处理
#define COUTD "%d\n"
#define COUTS "%s\n"
#define M(y)y*y+3*y
#define CHAR char*
#define M1(a,b,c) ((a*10)+(b*20)-(c*30))
#define M2(a,b) ((a>b)?a:b)
typedef char* CHAR1;

void main()
{
	int GP01 = 0, GP02 = 0, GP03 = 0;
	CHAR s1 = "Hello Word";
	CHAR s2, s3;                //这条语句相当于char *s2,s3   s2是字符指针而s3是字符变量
	CHAR1 s4, s5;               //这条语句相当于char *s4,*s5
	int k, k1, k2;
	k = M(10);                  //这条语句相当于k=10*10+3*10
	k1 = M1(67, 87, 99)*M(90);  //这种宏定义的运算尽量是不要使用
	k2 = M2(10, 11);
	printf(COUTD, k);
	printf(COUTS, s1);
	printf(COUTD, k1);
	printf(COUTD, k2);
	printf("s2:%d s3:%d \n", sizeof(s2), sizeof(s3));
	printf("s4:%d s5:%d \n", sizeof(s4), sizeof(s5));
	//以下为预编译处理的一些比较普遍的演示
#if (OSTR1==OSTR2)
	printf("OSTR1等于OSTR2\n");	//OSTR1与OSTR2都是在define预处理的时候被定义
#else
	printf("OSTR1不等于OSTR2\n");
#endif
	if (IF_ALL_STAST(0))		//C语言中没有end关键字#endif只在预处理中出现
		printf("STAST=GP01=GP02=GP03\n");
	else
		printf("STAST!=GP01-GP03\n");

	system("pause");
}

  

posted on 2015-04-14 23:06  小咒  阅读(319)  评论(0编辑  收藏  举报

导航