Chinaunix首页 | 论坛 | 博客
  • 博客访问: 105071
  • 博文数量: 25
  • 博客积分: 514
  • 博客等级: 下士
  • 技术积分: 690
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-07 01:22
个人简介

漂泊海外的游子

文章分类

全部博文(25)

文章存档

2015年(2)

2013年(1)

2012年(22)

分类: C/C++

2012-03-08 03:49:12

预处理指令是先定义的,可以简化很多事情,也能够使程序清晰。

预处理的指令是在任何代码执行前执行的。它们以#开头,只有一行,行尾没有";"。如果一行写不下,就在行后面添上\,继续下面一行写。

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的出现。
  1. #define TABLE_SIZE 100
  2. int table1[TABLE_SIZE];        //100
  3. #undef TABLE_SIZE
  4. #define TABLE_SIZE 200
  5. 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) |
给主人留下些什么吧!~~