Posted on 2007-05-30 09:56
morphis 阅读(241)
评论(0) 编辑 收藏 所属分类:
1. C/Cpp
预处理器
预处理器在编译器之前根据指令更改程序文本。编译器看到的是预处理器修改过的代码文本(称作“翻译单元(translation unit)”)。
预处理器的三大功能:
1。头文件或源文件包含;
2。宏扩展;
3。条件编译;
头文件包含:
#include <stdio.h> //编译器首先到标准头文件库查找;
#include “myHead.h” //编译器首先到当前目录下查找,如找不到再到标准头文件库查找;
预处理指令:
#include #define #undef #if #elif #else #endif #ifdef #ifndef #error #line #pragma
宏定义:
用#define定义一个宏;用#undef删除一个宏;
宏的分类:
无参数宏(类对象宏)
例:
#define MAXLINES 500
类对象宏类似常数,因此可以用下面语句代替,并且推荐用下面语句来定义。
Const int MAXLINES = 500;
带参数宏(类函数宏)
例:
#define abs(x) ( (x) > 0 ? (x) : (- (x) ) )
//参数最好用括号封装,这样在替换时不会产生歧义
类函数宏大多可以用内联函数来代替,并且推荐。
inline int abs(int x)
{
return x > 0 ? x : (-x);
}
预定义宏:
__LINE__ __FILE__ __DATE__ __TIME__ __cplusplus
例:
// sysmac.cpp
#include <iostram>
using namespace std;
main()
{
Cout << “__DATE__ == “ << __DATE__ << endl;
Cout << “__TIME__ == “ << __TIME__ << endl;
Cout << “__LINE__ == “ << __LINE__ << endl;
Cout << “__FILE__ == “ << __FILE__ << endl;
}
//输出:
__DATE__ == Nov 28 1996
__TIME__ == 09:37:38
__LINE__ == 7
__FILE__ == sysmac.cpp
预处理运算符:
# ## Defined
# 字符串化;## 加标记;
具体看下面的例子:
#include <stdio.h>
#define trace(x,format) printf(#x “= %” #format “\n” , x)
#define trace2(i) trace(x ## i , d)
main()
{
int i = 1;
float x = 2.0;
char *s = “three”;
trace(i,d); //printf( “x” “=%” “d” “\n” , x)
trace(x,f);
trace(s,s);
Int x1=1,x2=2,x3=3;
trace2(1); //trace(x1,d)
trace2(2);
trace2(3);
}
//输出:
i = 1
x = 2.000000
s = three
x1 = 1
x2 = 2
x3 = 3