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 }

 

posted on 2017-08-02 14:51  低头捡石頭  阅读(16)  评论(0编辑  收藏  举报

导航