预处理指令是先定义的,可以简化很多事情,也能够使程序清晰。
预处理的指令是在任何代码执行前执行的。它们以#开头,只有一行,行尾没有";"。如果一行写不下,就在行后面添上\,继续下面一行写。
1. macro definitions (#define, #undef)
#define identifer replacement
意思就是说,程序中的idnetifer 将会被取代replacement。
#define TABLE_SIZE 100;
int table1[TABLE_SIZE];
这就相当于,int table1[100];
#define 也可以一些函数。
#define getmax(a,b) a>b?a:b
这样程序中就可以直接用getmax了。
这些macros并不会模块结构所影响,一个macro会持续到#undef的出现。
- #define TABLE_SIZE 100
-
int table1[TABLE_SIZE]; //100
-
#undef TABLE_SIZE
-
#define TABLE_SIZE 200
-
int table2[TABLE_SIZE]; //200
函数宏定义中,替代语句可以接受两个特别的操作符#和##。
替代语句中,一个参数的前面有个#,意味着这个参数将会作为字符串处理,就好像将这个参数添加了双引号。
#define str(x) #x
cout<
相当于
cout<<"test";
对于##,可以将两个参数连起来。
#define glue(a,b) a##b
glue(c,out)<<"test";
相当于
cout<<"test";
2. conditional inclusions (#ifdef, #ifndef, #if, #endif, #else and #elif)
这个好玩了,就好像条件语句一样。
宏定义,就好像一个在代码之前的一个预处理程序。
不用多解释,不看就明白。
3. line control (#line)
就是提示出错的地方,如果这个程序出现错误。
#line 20
就是将这一行的行号定义为20,下面的行号在这个基础上增加。
如果出错了,就会显示相应的行号。
4. error directive (#error)
当程序编译的时候,如果碰到这个语句,就停止编译,并显示错误。
#ifndef _cplusplus
#error A C++ complier is required;
#endif
5. #include
这个不用说了,注意的是标准头文件(<>)和自定义头文件(“”)的区别。
6. #pragma
查阅编译器的手册,得到更多的信息,就用这个。
7. predefined macro names
_LINE_ 源代码编译的时候,当前行的行数。
_FILE_ 一个字符串,源代码被编译的时候的一个假定的名称
_DATE_ 显示日期
_TIME_ 时间
_cplusplus 所有的C++编译器都有这个定义它为某个值。
阅读(1165) | 评论(0) | 转发(0) |