首页 > 代码库 > 20170426
20170426
如果一个宏里面需要经过复杂的处理才能得到一个结果数字,则这个宏必须写成一个表达式
1 /*
2 宏演示
3 */
4 #include <stdio.h>
5 #define SQUARE(n) ((n) * (n))
6 int main() {
7 int num = 4;
8 printf("%d\n", SQUARE(++num));//((++num) * (++num)),第一个++num,num为5,第二个++num,num为6,然后相乘36
9 return 0;
10 }
结果:36
宏操作符包括#和##
#操作符可以把宏的一个参数转换成字符串字面值
1 #include <stdio.h>
2 #define STR(n) #n
3 int main() {
4 printf("%s\n", STR(abc));
5 return 0;
6 }
STR(abc)先替换成 #abc, 然后二次替换 "abc"
##操作符可以把一个代表标识符参数和其它内容合并形成一个新的标识符
1 #include <stdio.h>
2 #define LOCAL(n) l_##n
3 int main() {
4 int LOCAL(num) = 0;
5 printf("%d\n", LOCAL(num));
6 return 0;
7 }
LOCAL(num)先替换成l_##num,然后二次替换为l_num(##抛弃)
条件编译可以在编译时只编译某些语句而忽略另外一些语句
#ifdef(#ifndef) <宏名称>
...
#else
...
#endif
以上语句结构可以根据某个宏是否被定义过而从两组语句中选择一组编译
1 /*
2 条件编译
3 */
4 #include <stdio.h>
5 int main() {
6 #ifdef ONE
7 printf("1\n");
8 #else
9 printf("2\n");
10 #endif
11 return 0;
12 }
如果定义了ONE的宏,执行第7行,否则执行第8行
#ifndef 表示没有定义过
#if 逻辑表达式
...
#elif 逻辑表达式(多个)
...
#else
...
#endif
以上结构可以根据任何逻辑表达式多组语句中选择一组编译
1 /*
2 折扣
3 */
4 #include <stdio.h>
5 int main() {
6 #if defined(FACTORY)
7 printf("80%%\n");
8 #elif !defined(FACTORY) && !defined(ELITE)
9 printf("100%%\n");
10 #else
11 printf("120%%\n");
12 #endif
13 return 0;
14 }
多文件程序编写时,某个函数必须属于某个文件,一个文件中可以包含多个函数
1 /*
2 多文件编程演示
3 */
4 #include <stdio.h>
5 int add(int x, int y) {
6 return x + y;
7 }
8
9 int main() {
10 printf("%d\n", add(3, 6));
11 return 0;
12 }
20170426