赞
踩
C
语言的预处理器(preprocessor)是其编译过程中的特殊部分。它可以识别、分析并按照其描述进行处理。C语言的预处理器发生在编译之前,不属于编译的一部分。
C语言的预处理器比较常见的包括:#include,#define,宏(macro)和#error。
#include可以说是c语言中最常见的预处理器,用来引用头文件。比如引用stdio.h:
#include <stdio.h>
#define 的作用是将程序中的一些常量命名,如:
- #define YES 1
- #define PI 3.14
- #define MYNAME "paul"
需要注意的是这些命名与变量赋值不同。变量赋值会在内存中划出一片区域用于存储该变量,#define属于预处理,发生在编译之前,编译器不会划出内存来存储#define的值。在编译前,编译器会找到程序中出现的#define对应的名称并将其替换为对应的值。
宏是一种特殊的#define方式,它实现了类似于函数的功能。比如:
#define SQUARE(n) n*n
在程序中可以这样使用:
- #include <stdio.h>
- #define SQUARE(n) n*n
-
- int main()
- {
- int x = 3;
- int y = SQUARE(x);
- printf("%d",y);
- return 0;
-
- }
运行结果是:9。
其他的一些宏:
比较大小
#define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )
检查一个字符是否是小写
#define IS_LOWER_CASE(x) ( ((x) >= 'a') && ((x) <= 'z') )
以及多参数的宏(Variadic Macros)
#define debugPrintf(...) printf("DEBUG: " __VA_ARGS__);
使用该宏的时候,变量可以是一个,如
- #define debugPrintf(...) printf("DEBUG: " __VA_ARGS__);
- int main()
- {
- debugPrintf("Hello World!\n");
- return 0;
- }
也可以是多个
- #define debugPrintf(...) printf("DEBUG: " __VA_ARGS__);
- #define testprintf(...) printf("test: " __VA_ARGS__);
-
- int main()
- {
- int x=12;
- int y=13;
- debugPrintf("x=%d, y=%d\n", x, y);
- testprintf("hey hey");
- return 0;
- }
#error将字符串直接输出到error stream:
#error "error message"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。