#ifdef、#if defined、#ifndef的使用

1.#ifdef和#if defined

注意两者都有个define的作用,区别在于使用方式上。前者的通常用法是:

#ifdef  X

....

#else

....

#endif

只能在两者中选择是否有定义。对于后者,常用法是:

#if defined x1

....

#elif defined x2

....

#elif defined x3

....

#endif

可以在多个中选择是否有定义。

2.#ifndef的使用方法

这是 //if not defined的简写,是宏定义的一种,它是可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等。实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种----条件编译。

#ifndef X

....

#else

....

#endif

时间: 2024-10-06 21:06:46

#ifdef、#if defined、#ifndef的使用的相关文章

#ifdef 支持Mac #ifndef 支持Windows

//mac qt可以运行 #ifdef Q_OS_MAC qDebug()<<QSysInfo::MacintoshVersion; #endif //Mac不运行 #ifndef Q_OS_MAC qDebug()<<QSysInfo::MacintoshVersion; #endif //Windows qt会运行 #ifndef Q_WS_WIN #endif //Windows qt不会运行 #ifndef Q_WS_WIN #endif

程序周期及预处理

处理过程:预处理.编译.连接 1.预处理:不是C++语句,不加:,必须以#开头 2.编译:先分析后综合,存储分配,目标代码生成 3.连接:不同文件之间重定位处理 预处理命令 {宏定义,文件包含,条件编译} 一.宏定义 用字符文本替换宏名 1.不带参的宏 #define 宏名 字符文本 (1)宏名按标识符取名,一般全大写,字符文本可以是任何(包括关键字) (2)字符串常量,标识符的一部分不会替换(只是整体的一部分) (3)同一宏不要定义多次,先取消,再定义,#undef (4)宏的作用范围:从#d

C++ #if #endif #define #ifdef #ifndef #if defined #if !defined详解

首先,让我们先从头文件开始,在很多头文件里,我们会看到这样的语句 #ifndef _MYHEADFILE_H #define _MYHEADFILE_H // .......语句...... #endif // _MYHEADFILE_H 为了避免同一个文件被include多次,我们常使用 #ifndef 进行判断,如果没有包含 _MYHEADFILE_H , 则使用#define 来定义一个宏 _MYHEADFILE_H , #endif 与#ifndef 首尾呼应,表示结束. 说到这里,我们

C/C++预处理指令#define,#ifdef,#ifndef,#endif…

本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何效果 #include包含一个源代码文件 #define定义宏 #undef取消已定义的宏 #if如果给定条件为真,则编译下面代码 #ifdef如果宏已经定义,则编译下面代码 #ifndef如果宏没有定义,则编译下面代码 #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #endif结束一个#if……#else条件编译块 #error停止编译并显示错误信息 本来只是想了解一下#ifdef,#ifnd

(转)C语言的条件编译#if, #elif, #else, #endif、#ifdef, #ifndef

有些程序在调试.兼容性.平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然可以通过变量设置,把所有可能用到的代码都写进去,在初始化时配置,但在不同的情况下可能只用到一部分代码,就没必要把所有的代码都写进去,就可以用条件编译,通过预编译指令设置编译条件,在不同的需要时编译不同的代码. (一)条件编译方法 条件编译是通过预编译指令来实现的,主要方法有: 1.#if, #elif, #else, #endif #if 条件 1 代码段 1#elif 条件 2 代码段 2...#

c++ --#ifdef、#ifndef和重复包含

关于避免头文件的重复引用 #ifdef .和 #ifndef 测试某个宏是否被定义,经常用于避免头文件的重复引用. 头文件的重复引用往往是由于包含嵌套造成的,比如 func.cpp文件包含如下头文件: //func.cpp文件中 #include "A.h" #include "B.h" 而 A.h中包含了 B.h: //A.h文件中 #include "B.h" 这意味着在 func.cpp文件对应的编译单元中,头文件 B.h被引用了两次,这就

#ifndef #define #ifdef 的区别与联系

文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突. 还是把头文件的内容都放在#ifndef和#endif中吧.不管你的头文件会不会被多个文件引用,你都要加上这个.一般格式是这样的: 文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个

条件编译ifndef、ifdef、endif

1.条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif 当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2. 其中#else部分也可以没有,即: 1 #ifdef 2 程序段1 3 #endif 2.条件编译命令另一种形式: 1 #ifndef 标识符 2 程序段1 3 #else 4 程序段2 5 #endif 只是第一行与第一种形式不同:将“ifdef”改为“ifndef”.它的作用是:若标识符未被定义

条件编译#ifdef的妙用详解

c语言中条件编译相关的预编译指令,包括  #define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. #define            定义一个预处理宏#undef            取消宏的定义 #if                   编译预处理中的条件命令,相当于C语法中的if语句#ifdef              判断某个宏是否被定义,若已定义,执行随后的语句#ifndef            与#ifdef

条件编译#ifdef的妙用详解_透彻

这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部 分内容指定编译的条件,这就是“条件编译”.有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句.     条件编译命令最常见的形式为:     #ifdef 标识符     程序段1     #else     程序段2     #endif          它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序