enum是C语言的关键字
枚举就是一个被命名的整型常数的集合
enum 枚举名
{
标识符[=整型常数],
标识符,
...
标识符
}; //枚举定义之后需要加 ; 结尾
注意:
1.在定义枚举时.标识符与标识符之间要用 , 隔开而不是 ;
2.在枚举中标识符可以和变量同名,如果同名变量会屏蔽标识符
(尽量不要同名)
3.在定义枚举时,方括号的内容时缺省值,可以有也可以没有
如果没有缺省值,标识符会按照0 1 2 3 4...的顺序进行表示
如果有缺省值,则会从指定的整型常数开始按顺序进行表示
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| #include <stdio.h>
#include <stdlib.h>
enum E
{
a,
b,
c,
d
};
int main(int argc, char *argv[])
{
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("c = %d\n", c);
printf("d = %d\n", d);
//a = 9527;枚举的标识符不是变量,不能做赋值运算
printf("a = %d\n", a);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #include <stdio.h>
#include <stdlib.h>
enum E
{
a,
b,
c,
d
};
int main(int argc, char *argv[])
{
int a = 9527;
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("c = %d\n", c);
printf("d = %d\n", d);
//a = 9527;枚举的标识符不是变量,不能做赋值运算
printf("a = %d\n", a);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #include <stdio.h>
#include <stdlib.h>
enum E
{
a,
b = 100,
c,
d
};
int main(int argc, char *argv[])
{
//int a = 9527;
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("c = %d\n", c);
printf("d = %d\n", d);
//a = 9527;枚举的标识符不是变量,不能做赋值运算
printf("a = %d\n", a);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #include <stdio.h>
#include <stdlib.h>
enum E{MIN, MAX = 10};
int main(int argc, char *argv[])
{
int i = 0;
for(i = MIN; i < MAX; i++)
{
printf("i = %d\n", i);
}
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| #include <stdio.h>
#include <stdlib.h>
enum E{MODE_0, MODE_1, MODE_2, MODE_3};
int main(int argc, char *argv[])
{
int mode = 0;
scanf("%d", &mode);
switch(mode)
{
case MODE_0 : printf("菜鸟难度!\n"); break;
case MODE_1 : printf("普通难度!\n"); break;
case MODE_2 : printf("地狱难度!\n"); break;
case MODE_3 : printf("中国男足难度!\n"); break;
}
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| #include <stdio.h>
#include <stdlib.h>
struct GPIO
{
unsigned char PA0 : 2;
unsigned char PA1 : 2;
unsigned char PA2 : 2;
unsigned char PA3 : 2;
unsigned char PA4 : 2;
unsigned char PA5 : 2;
unsigned char PA6 : 2;
unsigned char PA7 : 2;
unsigned char PA8 : 2;
unsigned char PA9 : 2;
unsigned char PA10: 2;
unsigned char PA11: 2;
unsigned char PA12: 2;
unsigned char PA13: 2;
unsigned char PA14: 2;
unsigned char PA15: 2;
};
enum mode
{
INPUT,
OUTPUT,
AF,
AN
};
int main(int argc, char *argv[])
{
struct GPIO P;
P.PA0 = OUTPUT;
P.PA10 = AF;
return 0;
}
|
预处理
条件编译
#ifndef __ADD_H
#define __ADD_H
除了在.h文件中加入,防止头文件被重复包含以外
在.c文件中也可以使用
1
2
3
4
5
6
7
8
9
10
11
12
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
#if 0
printf("Hello World!\n");
#else
printf("你好,中国!\n");
#endif
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #include <stdio.h>
#include <stdlib.h>
#define SUB
int main(int argc, char *argv[])
{
int a = 13, b = 7;
int sum = 0;
#ifndef ADD
sum = a + b;
#else
sum = a - b;
#endif
printf("sum = %d\n", sum);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| #include <stdio.h>
#include <stdlib.h>
#define STM32F103CBT6
int main(int argc, char *argv[])
{
int PIN = 0;
#if defined (STM32F103RBT6)
PIN = 64;
#elif defined (STM32F103CBT6)
PIN = 32;
#endif
printf("PIN = %d\n", PIN);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| #include <stdio.h>
#include <stdlib.h>
#define FLAG 2
int main(int argc, char *argv[])
{
int a = 13, b = 7;
int sum = 0;
#if FLAG==0
sum = a + b;
#elif FLAG==1
sum = a - b;
#elif FLAG==2
sum = a * b;
#elif FLAG==3
sum = a / b;
#else
sum = a % b;
#endif
printf("sum = %d\n", sum);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
| #include <stdio.h>
#include <stdlib.h>
#define PAI 3.14
int main(int argc, char *argv[])
{
printf("PAI = %f\n", PAI);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| #include <stdio.h>
#include <stdlib.h>
#define ARRSIZE 10
int main(int argc, char *argv[])
{
int arr[ARRSIZE];
int i = 0;
for(i = 0; i < ARRSIZE; i++)
{
}
return 0;
}
|
面试题
定义一个宏,计算一年(平年)有多少秒
定义一个宏,比较两个值的最大值
3.定义一个宏,完成两个变量值的交换
注意 : 在写宏函数的时候一定要加小括号,代表是一个整体
1
2
3
4
5
6
7
8
9
10
11
| #include <stdio.h>
#include <stdlib.h>
#define SEC_OF_YEAR (365*24*60*60)
int main(int argc, char *argv[])
{
printf("SEC_OF_YEAR = %d\n", SEC_OF_YEAR);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #include <stdio.h>
#include <stdlib.h>
#define MUL(A,B) (A)*(B)
//MUL(A,B) A*B
//MUL(2+3,3+4) 2+3*3+4 = 15
int mul(int a, int b)
{
return a * b;
}
int main(int argc, char *argv[])
{
int a = 13, b = 7;
printf("MUL = %d\n", MUL(2+3, 3+4));//a+b
printf("mul = %d\n", mul(2+3, 3+4));//a+b
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| #include <stdio.h>
#include <stdlib.h>
#define MAX(A,B) A>B?A:B
//a++ > b++ ? a++ : b ++
int max(int a, int b)
{
return a > b ? a : b;
}
int main(int argc, char *argv[])
{
int a = 13, b = 7;
printf("MAX = %d\n", MAX(a++, b++));
a = 13;
b = 7;
printf("max = %d\n", max(a++, b++));
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| #include <stdio.h>
#include <stdlib.h>
//#define SWAP(A,B) {typeof(A)tmp; tmp=A; A=B; B=tmp;}
//#define SWAP(A,B) {(A)=(A)+(B);(B)=(A)-(B);(A)=(A)-(B);}
#define SWAP(A,B) {(A)^=(B);(B)^=(A);(A)^=(B);}
int main(int argc, char *argv[])
{
int a = 13, b = 7;
printf("a = %d b = %d\n", a, b);
SWAP(a,b);
printf("a = %d b = %d\n", a, b);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("__DATE__ = %s\n", __DATE__);
printf("__TIME__ = %s\n", __TIME__);
printf("__FILE__ = %s\n", __FILE__);
printf("__LINE__ = %d\n", __LINE__);
printf("__FUNCTION__ = %s\n", __FUNCTION__);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int a = 3, b = 4, c = 5;
if((a + b > c) && \
(a + c > b) && \
(b + c > a))
{
printf("可以构成三角形!\n");
}
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
| #include <stdio.h>
#include <stdlib.h>
#define PRINT_STR(n) #n
int main(int argc, char *argv[])
{
printf("PRINT_STR = %s\n", PRINT_STR(12+34));
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| #include <stdio.h>
#include <stdlib.h>
#define INT_VAR(n) var##n
int main(int argc, char *argv[])
{
int var1 = 100;
int var2 = 200;
int var3 = 300;
int var4 = 400;
int var5 = 500;
printf("VAR = %d\n", INT_VAR(2));//var2
printf("VAR = %d\n", INT_VAR(5));//var5
return 0;
}
|