首页 > 其他分享 >#if、#ifndef 和 #ifdef

#if、#ifndef 和 #ifdef

时间:2023-07-06 13:44:36浏览次数:33  
标签:头文件 else ifdef ifndef 程序段 define

1 简介

#ifndef 和 #ifdef 是一种宏定义判断,作用是防止多重定义。#ifndef 是 if not define 的简写,#ifdef 是 if define 的简写。

使用格式如下:

#if #ifdef #ifndef
#if(判断条件)
程序段1
#else
程序段2
#endif
#ifdef(标识符)
程序段1
#else
程序段2
#endif
#ifndef(标识符)
程序段1
#else
程序段2
#endif

如果判断条件为真(假)或者定义了(没有定义)标识符,那么这个相应的程序段1(程序段2)就会被编译,否则就不会被编译。不同于 if-else 语句,if-else 语句都会被编译,但是会依据判断条件来决定是否执行相应的语句。

2 使用场景

(1)在头文件中使用,防止头文件被多重调用
(2)作为测试使用,省去注释代码的麻烦
(3)作为不同角色或场景的判断使用

2.1 头文件中使用

点击查看代码
/* header.h */
#ifndef HEADER_H_
#define HEADER_H_

#include "c_file.c"

class calssName
{
public:
    /* ...... */
private:
    /* ...... */
};

#endif

即使 c_file.c 文件中也包含了 header.h 头文件,由于 HEADER_H_ 的宏的存在,不会出现重复引用头文件,可以避免重复声明。

2.2 测试使用

点击查看代码
include <iostream>

#define IOI

using namespace std;

int main()
{
#ifdef IOI
    cout << "999" << endl;
#endif
    return 0;
}

可以通过是否注释 #define IOI 来控制主函数中的代码执行与否。

2.3 作为不同角色或者场景的判断使用

点击查看代码
#include <iostream>

using namespace std;

#define ADMIN 8

int main()
{
#if (ADMIN == 9)
    cout << "999" << endl;  /* 没有编译该语句 */
#else
    cout << "888" << endl;  /* 编译并执行了该语句 */
#endif
    return 0;
}

标签:头文件,else,ifdef,ifndef,程序段,define
From: https://www.cnblogs.com/--ZHIYUAN/p/17531928.html

相关文章

  • 99.#ifndef的用法
    1.概述  一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是”条件编译“。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。条件编译命令最常见的形式为:#i......
  • //#ifdef __cplusplus extern "C" 含义
    #ifdef__cplusplusextern"C"{#endif#import<UIKit/UIKit.h>@interfaceViewController:UIViewController@property(nonatomic,readonly)UIView*headView;@end//#ifdef__cplusplusextern"C"{#endif//一段代码#ifdef__cplu......
  • 关于uniapp条件编译ifdef, ifndef, endif
     标识含义: 示例  转载于https://lequ7.com/guan-yu-uniappuniapp-tiao-jian-bian-yi-ifdefifndefendif.html......
  • #if、 #ifdef、#else、#endif等宏详解
    这些都是条件编译命令#ifdef语句,对应#endif语句,可以区隔一些与特定头文件、程序库和其他文件版本有关的代码。可翻译为:如果宏定义了语句1则执行程序2。概述:#ifdef等宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定......
  • 对于条件编译 #ifndef __LED_H的理解
    一、下划线“__”属于编程风格的内容,对程序没有影响。不用下划线也可以,用几个下划线也由个人习惯二、其实本质是一个宏名。由此我们可以防止发生重复定义或声明假设你的头文件名为led.h,根据习惯,我们声明一个宏__LED_H对应这个头文件,在头文件中开始的地方和结尾的地方加上对__LED......
  • 【c&c++】#ifdef __cplusplus extern “C”的作用详解
    extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern"C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因......
  • #ifndef #define,#endif 和 #if DEBUG,#endif的用法
    在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量重定义的错误。在头文件中实用#ifndef#define#endif能避免......
  • ifdef与ifndef的区别
    看:https://blog.csdn.net/ustczwc/article/details/9070941        ......
  • 【c&c++】C语言中#ifdef,#ifndef和#endif的作用
    现在规定一下头文件书写规范,根据陈皓编写的跟我一起些makefile,一定要记住:头文件中应该只是声明,而定义应该放在C/C++文件中。否则如果出现有定义,比如头文件中有inta=2;如......
  • #ifdef和#if的区别
    ifdef和if的区别ifdef1)#ifdef只是判断后面的标识符有没有定义,而不在乎标识符的值,标识符是0是1对它来说都没有区别,只要预先定义了,执行#ifdef后的代码;2)#ifdef是和#else搭......