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"); }