漫步云端

移动开发(Android、iPhone、Windows Mobile) | JAVA | C | C++ | .net | Objective C | 微软企业开发技术 | 嵌入式系统设计与开发
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++预处理器指示符

Posted on 2010-12-08 22:38  charley_yang  阅读(1117)  评论(0编辑  收藏  举报

几个预处理指示符的使用

#include

   头文件通过 include 预处理器指示符(preprocessor include directive) 而成为我们程序的 一部分 预处理器指示符用 # 号标识 这个符号将放在程序中该行的最起始一列上 处理 这些指示符的程序被称做预处理器 preprocessor 通常捆绑在编译器中 。

#ifndef

   被包含的文件还可以含有#include 指示符 由于嵌套包含文件的原因 一个头文件可能 会被多次包含在一个源文件中,条件指示符可防止这种头文件的重复处理 例如 :

#ifndef BOOSTORE_H 
#define BOOKSTORE_H 
/* Bookstore.h 的内容 */ 
#endif 

   为了保证头文件只被处理一次 把#define 指示符  #define BOOKSTORE_H 放在#ifndef后面 这样在头文件的内容第一次被处理时 BOOKSTORE_H将被定义 从而防止了在程序文本文件中以后#ifndef指符的值为真  。

#ifdef

#ifdef指示符常被用来判断一个预处理器常量是否已被定义 以便有条件地包含程序代码 例如 

int main() 
{ 
#ifdef DEBUG 
cout << "Beginning execution of main()\n"; 
#endif 

string word; 
 vector< string > text; 
 while ( cin >> word ) 
 { 
  #ifdef DEBUG 
  cout << "word read: " << word << "\n"; 
  #endif 
  text.push_back( word ); 
 } 
 
 // ... 
}


 
我们在编译程序时可以使用-D选项 并且在后面写上预处理器常量的名字 这样就能在 命令行中定义预处理器常量 :
 
$ CC -DDEBUG main.C
也可以在程序中用#define 指示符定义预处理器常量 。

assert

assert()是C语台标准库中提供的一个通用预处理器宏。

#include <assert.h>

#include <cassert> 

using namespace std;

下面是一个简单的使用示例 
assert( filename != 0 );