c++ #ifdef的用法

简介:

http://www.tuicool.com/articles/mIJnumB

 

#ifdef的用法

   灵活使用#ifdef指示符,我们可以区隔一些与特定头文件、程序库和其他文件版本有关的代码。
代码举例:新建define.cpp文件

[cpp]  view plain copy
 
  1. #include "iostream.h"  
  2. int main()  
  3. {  
  4. #ifdef DEBUG   
  5. cout<< "Beginning execution of main()";  
  6. #endif   
  7. return 0;  
  8. }  
运行结果为:Press any key to continue

改写代码如下:
[cpp]  view plain copy
 
  1. #include "iostream.h"  
  2. #define DEBUG  
  3. int main()  
  4. {  
  5. #ifdef DEBUG   
  6. cout<< "Beginning execution of main()";  
  7. #endif   
  8. return 0;  
  9. }  
运行结果为:Beginning execution of main()
Press any key to continue

更一般的情况是,#define语句是包含在一个特定的头文件中。
比如,新建头文件head.h,在文件中加入代码:

[cpp]  view plain copy
 
  1. #ifndef DEBUG  
  2. #define DEBUG  
  3. #endif  
  4.   
  5. 而在define.cpp源文件中,代码修改如下:  
  6. #include "iostream.h"  
  7. #include "head.h"  
  8. int main(){  
  9. #ifdef DEBUG   
  10. cout<< "Beginning execution of main()";  
  11. #endif   
  12. return 0;  
  13. }  

运行结果如下:Beginning execution of main()
Press any key to continue
结论:通过使用#ifdef指示符,我们可以区隔一些与特定头文件、程序库和其他文件版本有关的代码

 

#if, #ifdef, #ifndef, #else, #elif, #endif的用法:

  这些命令可以让编译器进行简单的逻辑控制,当一个文件被编译时,你可以用这些命令去决定某些代码的去留,

这些命令式条件编译的命令。

常见的条件编译的三种形式:

①第一种形式:  
#if defined(或者是ifdef)<标识符(条件)> 

<程序段1>

#endif  
②第二种形式:  
#if !defined(或者是ifndef)<标识符(条件)> 

<程序段1> 

  #ifdef … 

[#elif … ] 

[#elif …] 

#else …  

#endif

示例:

#include <iostream>

using namespace std;

int main() 

#if DEBUG  /*或者是#ifdef DEBUG*/ 
cout << "条件成立,DEBUG已经定义了!" <<endl; 
#else 
cout << "条件不成立,DEBUG还没定义" <<endl; 
#endif 
return 0; 
}

//结果输出: 条件不成立,DEBUG还没定义

//如果是添加了#define DEBUG ,输出结果是:条件成立,DEBUG已经定义了!

#include <iostream> 
using namespace std; 
#define DEBUG 
int main() 

#ifdef DEBUG /*或者是#ifdef DEBUG*/ 
cout << "条件成立,DEBUG已经定义了!" <<endl; 
#else 
cout << "条件不成立,DEBUG还没定义" <<endl; 
#endif 
return 0; 
}

//要注意的是,如果是#define 宏名,没有宏体如 #define DEBUG,就必须使用#ifdef或#ifndef与之对应,

//如果是#define 宏名 宏体,如 #define NUM 1,#if 和#ifdef都可以使用。

/*

#define的用法:

*/

示例二:

#include <iostream> 

using namespace std; 
#define NUM  10 
int main() 

        #ifndef NUM 
        cout << "NUM没有定义!"<<endl; 
        #elif NUM >= 100 
        cout << "NUM >100" <<endl; 
        #elif NUM <100 && NUM >10 
        cout << "10 < NUM < 100" <<endl; 
        #elif NUM == 10 
        cout << "NUM ==10" <<endl; 
        #else 
        cout << "NUM < 10" << endl; 
        #endif 
        return 0; 

//输出NUM ==10 

 

 

 

也可以在mk文件定义NUM

ifeq ($(BOARD_SCREENRECORD_LANDSCAPE_ONLY),true)
LOCAL_CFLAGS += -DNUM



本文转自wanqi博客园博客,原文链接http://www.cnblogs.com/wanqieddy/p/4377937.html,如需转载请自行联系原作者



相关文章
|
7月前
|
存储 算法 编译器
【C++ TypeName用法 】掌握C++中的TypeName:模板编程的瑞士军刀
【C++ TypeName用法 】掌握C++中的TypeName:模板编程的瑞士军刀
507 1
|
7天前
|
存储 安全 编译器
第二问:C++中const用法详解
`const` 是 C++ 中用于定义常量的关键字,主要作用是防止值被修改。它可以修饰变量、指针、函数参数、返回值、类成员等,确保数据的不可变性。`const` 的常见用法包括:
42 0
|
29天前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
30 3
【C++】map、set基本用法
|
7天前
|
C++
第十三问:C++中静态变量的用法有哪些?
本文介绍了 C++ 中静态变量和函数的用法及原理。静态变量包括函数内的静态局部变量和类中的静态成员变量,前者在函数调用间保持值,后者属于类而非对象。静态函数不能访问非静态成员,但可以通过类名直接调用。静态链接使变量或函数仅在定义文件内可见,避免命名冲突。
20 0
|
4月前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法
|
7月前
|
人工智能 机器人 测试技术
【C++】static_cast基本用法(详细讲解)
【C++】static_cast基本用法(详细讲解)
159 0
|
4月前
|
存储 程序员 编译器
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
53 0
|
5月前
|
C++
C++ string中的函数和常用用法
C++ 中string中的函数和常用用法
60 4
|
6月前
|
存储 C++
C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点
C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点
57 7
|
6月前
|
存储 人工智能 C++
map容器在C++中的具体用法以及相关注意点
map容器在C++中的具体用法以及相关注意点
64 1