C++中#ifdef、#endif等宏的使用
来源:互联网 发布:mac怎么切换独立显卡 编辑:程序博客网 时间:2024/06/06 20:46
一般情况下,源程序中所有的行都参加编译。但是有时希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句,这就是“条件编译”。
为了满足条件编译可以使用#ifdef、#ifndef、#endif等宏指令。
条件编译命令最常见的形式为:
(1)如果宏定义了标识符1,则执行程序段1。
#ifdef 标识符1
//程序段1
#endif
(2)如果宏定义了标识符1,则执行程序段1;否则执行程序段2。
#ifdef 标识符1
//程序段1
#else
//程序段2
#endif
上面的“程序段”可以是语句组,也可以是命令行。“标识符”可以使表达式。#ifdef可以由#ifndef替换,定义完全相反,如(1)中#ifdef由#ifndef替换
下面具两个例子说明#ifdef、#ifndef、#endif等宏指令的使用。
例子1:
如果我们在编写程序时,调试时希望输出一些信息以便于调试,而调试完成后这些信息是不需要输出的,那么我们可以这么做:
#define DEBUG
#ifdef DEBUG
//调试时需要输出的信息语句
#endif
当我们调试完成后,直接把语句#define DEBUG删掉即可,然后#ifdef DEBUG和#endif之间定义的语句便不会被执行。
例子2 :
当A 大于0输出A,A小于0输出-A
#ifdef ISPOSITIVE
#ifdef ISPOSITIVE
cout<<A;
#else
cout<<-A;
#endif
假设我们输入的一直是正数,则定义#ifdef ISPOSITIVE,如果输入一直是负数,则删掉定义#ifdef ISPOSITIVE即可。
总结:
条件编译可以提高C++源程序的通用性。比如例子1中如果输出信息特别多,不使用条件编译也行,但是修改程序量太大。
采用条件编译,可以减少被编译的语句,从而减少目标的长度。当条件编译段比较多时,目标程序长度可以大大减少。比如例子2如果用if语句代替,那么if语句的所有内容都需要编译,即目标程序太长,而使用条件编译则选择性编译,缩减了目标函数长度(如果语句十分长,完全体现了这种优势)。
- C++中#ifdef、#endif等宏的使用
- 在Java中实现类似C/C++中#ifdef...#endif预编译宏的效果
- 【C语言】【面试题】【笔试题】对于宏的使用,if endif #define _DEBUG_ ifdef _DEBUG_
- 【C语言】【面试题】【笔试题】对于宏的使用,if endif #define _DEBUG_ ifdef _DEBUG_
- C中#ifdef、#endif、+1、#if defined
- #if 0...#endif #if defined()...#endif #ifdef...#endif #ifndef...#endif 等的用法
- #if 0...#endif #if defined()...#endif #ifdef...#endif #ifndef...#endif 等的用法
- #ifdef __cplusplus extern "C" { #endif 的解释
- #ifdef __cplusplus extern "C" { #endif 的解释
- #ifdef __cplusplus extern "C" { #endif 的解释
- “#ifdef __cplusplus extern "C" { #endif”的定义
- “#ifdef __cplusplus extern "C" { #endif”的定义
- #ifdef __cplusplus extern "C" { #endif 的解释
- #ifdef __cplusplus extern c #endif 的作用
- #ifdef __cplusplus extern "C" { #endif 的解释
- #ifdef __cplusplus extern "C" { #endif 的解释
- #ifdef __cplusplus extern "C" { #endif 的解释
- #ifdef __cplusplus extern "C" { #endif 的解释
- 如何修改eclipse 格式化行长度
- Spring如何使用aop切入controller层---问题笔记
- Window8 FTP站点构建
- 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- 第11周项目1.2用函数输出星号图
- C++中#ifdef、#endif等宏的使用
- WPF学习(第九章)命令
- 蓝桥杯begin练习
- IOC及Bean容器
- Json & Gson
- crackme.chm之figugegl.1.exe
- 第十一周项目 6 回文,素数(反序数)
- glusterfs双副本原理解析和脑裂解决方案
- SAP ABAP编程 Ranges用法