C语言 - 宏 | 条件编译
宏
1 - 主要功能是做替换。它的使用能让程序更加易于修改。宏不是变量,只是做标记,它不做运算优先级的检查
1 #include <stdio.h> 2 3 #define SUMVALUE(x,y) x+y 4 #define SUMNUM(a,b) (a+b) 5 int main(int argc, const char * argv[]) { 6 7 8 int a = SUMVALUE(20, 10)*SUMVALUE(10, 30); 9 printf("%d\n",a); // 150 10 11 int b = SUMNUM(20, 10)*SUMNUM(10, 30); 12 printf("%d\n",b); // 1200 13 14 15 return 0; 16 }
2 - 命名规则:纯大写或者驼峰命名法
1 #include <stdio.h> 2 #define kCount 10 // 末尾不要加分号 3 #define kSumValue(x,y) x+y // 有参宏 4 #define kMaxValue(x,y) x>y ? x : y 5 6 int main(int argc, const char * argv[]) { 7 8 // 冒泡排序 9 int array [kCount]={7,8,9,23}; 10 for (int i=0; i<kCount-1; i++) { 11 for (int j=0; j<kCount-1-i; j++) { 12 if (array[j]>array[j+1]) { 13 int temp = array[j]; 14 array[j]=array[j+1]; 15 array[j+1]=temp; 16 } 17 } 18 } 19 20 for (int i=0; i<kCount; i++) { 21 printf("%d ",array[i]); 22 } 23 24 // 加 25 int sum = kSumValue(3,5); 26 printf("\n%d ",sum); 27 28 // 比较 29 int max =kMaxValue(4,5); 30 printf("\n%d\n",max); 31 32 return 0; 33 }
条件编译
1 - 条件编译和 if 语句不同,前者是编译期执行,后者是在运行期执行
1 #include <stdio.h> 2 3 #define FUCK 0 4 int main(int argc, const char * argv[]) { 5 6 // 方式一:ifdef 7 #ifdef FUCK 8 printf("FUCK\n");// 执行此行 9 #else 10 printf("SHIT\n"); 11 #endif 12 13 14 // 方式二:ifndef 15 #ifndef FUCK 16 printf("FUCK\n"); 17 #else 18 printf("SHIT\n");// 执行此行 19 #endif 20 21 22 // 方式三:后跟常量,非 0 即真 23 #if FUCK 24 printf("FUCK 10 \n"); 25 #else 26 printf("No \n"); 27 #endif 28 29 #if 5 30 printf("5\n");// 执行此行 31 #else 32 printf("10\n"); 33 #endif 34 35 36 return 0; 37 }