c++ #ifdef的用法
http://www.tuicool.com/articles/mIJnumB
#ifdef的用法
灵活使用#ifdef指示符,我们可以区隔一些与特定头文件、程序库和其他文件版本有关的代码。
代码举例:新建define.cpp文件
- #include "iostream.h"
- int main()
- {
- #ifdef DEBUG
- cout<< "Beginning execution of main()";
- #endif
- return 0;
- }
运行结果为:Press any key to continue
改写代码如下:
- #include "iostream.h"
- #define DEBUG
- int main()
- {
- #ifdef DEBUG
- cout<< "Beginning execution of main()";
- #endif
- return 0;
- }
运行结果为:Beginning execution of main()
Press any key to continue
更一般的情况是,#define语句是包含在一个特定的头文件中。
比如,新建头文件head.h,在文件中加入代码:
- #ifndef DEBUG
- #define DEBUG
- #endif
- 而在define.cpp源文件中,代码修改如下:
- #include "iostream.h"
- #include "head.h"
- int main(){
- #ifdef DEBUG
- cout<< "Beginning execution of main()";
- #endif
- return 0;
- }
运行结果如下: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
endif
c++ #ifdef的用法的更多相关文章
- #ifdef的用法【转】
#ifdef的用法 #ifdef的用法灵活使用#ifdef指示符,我们可以区隔一些与特定头文件.程序库和其他文件版本有关的代码.代码举例:新建define.cpp文件 #include &qu ...
- 【转】#ifdef _DEBUG用法小结
原文地址:http://blog.csdn.net/shijizhisheng/article/details/1908054 1 #ifdef _DEBUG virtual void AssertV ...
- #ifdef endif 用法
"#ifdef 语句1 程序2 #endif“ 可翻译为:如果宏定义了语句1则程序2. 作用:我们可以用它区隔一些与特定头文件.程序库和其他文件版本有关的代码. 代码举例:新建define. ...
- 编译预处理命令--define和ifdef的使用
这里将对常用的预处理命令进行学习. 一.宏定义 ·defined 格式:`defined 宏名 数值 或者 `define 宏名 注意:后面没有‘;‘,和单片机不一样: ...
- #if 与 #ifdef 之间的区别
先来看个例子: #define TARGET_LITTLE_ENDINA 1 #define TARGET_BIG_ENDINA 0 #ifdef TARGET_LITTLE_ENDINA call ...
- 关于#ifdef #ifndef
https://www.cnblogs.com/agnily/p/5848768.html 1.先看#ifdef的用法: #define KEY1_PA0 #ifdef KEY1_PA0 ------ ...
- C++ "#"的作用和用法
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/48879093 1 #和##的作用和用法 ...
- 90.#define高级用法
define把参数变成字符串 #define f(x) printf("%s",#x); define连接两个字符串 #define a(x) a##x define把参数变成字符 ...
- #if 和#ifdef的区别
转自:https://blog.csdn.net/zhangchiytu/article/details/7563329 先看个例子:#define TARGET_LITTLE_ENDINA 1#de ...
随机推荐
- 谈谈如何查看Android项目方法数
我们都知道,Android App的方法数是有天花板的,在方法数达到65536时,就会出现打包异常,这个时候,我们需要去除一些不需要的三方工具包,或者采用多Dex技术分包,都能达到正常打包的效果. 可 ...
- AJAX请求时status返回状态明细表(转)
转自:http://www.cnblogs.com/wangking/p/6530904.html AJAX请求时status返回状态明细表 readyState的五种状态2010-03-04 18: ...
- AC自动机学习笔记-2(Trie图&&last优化)
我是连月更都做不到的蒟蒻博主QwQ 考虑到我太菜了,考完noip就要退役了,所以我决定还是把博客的倒数第二篇博客给写了,也算是填了一个坑吧.(最后一篇?当然是悲怆のnoip退役记啦QAQ) 所以我们今 ...
- PHP内置函数实现简单洗牌
function wash_card($num_card) { $a = array_keys(array_fill(0, $num_card, '')); $b = array_keys(array ...
- Java之路(三) 控制执行流程
Java的控制语句设计的关键字有if-else while do-while for return break和switch. Java虽然保留goto关键字,但不支持goto语句. 1.true和f ...
- 标签传播算法(llgc 或 lgc)
动手实践标签传播算法 复现论文:Learning with Local and Global Consistency1 lgc 算法可以参考:DecodePaper/notebook/lgc 初始化算 ...
- EF框架搭建小总结--CodeFirst代码优先
前言:之前在下总结编写了一篇 EF框架搭建小总结--ModelFirst模型优先 博文,看到一段时间内该博文的访问量蹭.蹭蹭.蹭蹭蹭...往上涨(实际也不是很多,嘿嘿),但是还是按捺不住内心的喜悦(蛮 ...
- 反射调用 java bean的set和get方法
一.使用java.beans.PropertyDescriptor import java.beans.IntrospectionException; import java.beans.Proper ...
- Postman高级应用——串行传参和动态传参详解
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 用Postman做接口测试的时候,要把多条用例一起执行,就需要把用例连接起来,一次性执行 目录 串行传参 动态传参 使用 ...
- Tecnomatix Process Designer & Process Simulate用法
1. 删除项目 在AdminConsole->Project Action中,点击Delete project即可.