[C++]C++ 中的 #if 、#ifndef 和 #ifdef

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

使用格式如下:

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

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

一般的使用场景如下:

1)头文件中使用,防止头文件被多重调用

2)作为测试使用,省去注释代码的麻烦

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

1、头文件中使用。标识符的定义格式其实没有规定,最好全部是大写,为了好区分,最好以头文件名命名,然后加上下划线_,便于区分。

//a.h
#ifndef A_H
#define A_H
#include "b.h"class A {
public://...
private://...
};#endif 

这样,即使其他几个头文件中包含 a.h,但是就只处理一次,第二次处理时,A_H 这个宏已经存在,将不会在执行循环里的程序。很好的防止了重复声明。

2、做测试用

#include <bits/stdc++.h>using namespace std;#define IOIint main()
{
#ifdef IOIcout << "999" << endl;
#endifreturn 0;
}

有时候当代码比较多的时候,要做测试,但是全部注释很麻烦,这时候使用#ifdef非常好用,如果我不想执行

cout << "999" <<endl; 这段程序,只需要将上面的 #define IOI 注释就可以了。

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

#include <bits/stdc++.h>using namespace std;#define ADMIN 8int main()
{
#if (ADMIN == 9)cout << "999" << endl;  //没有编译该语句
#elsecout << "000" << endl;  //编译并执行了该语句
#endifreturn 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx(二)

nginx的验证模块 输入用户名和密码 第一步先下载httpd 这个安装包 第二步编辑子配置文件 然后去网页访问192.168.68.3/admin/ 连接之后&#xff0c;会出现404&#xff0c;404出现是因为没给网页写页面 如果要写页面&#xff0c;则在/opt/html&#xff0c;建立一个admin&#x…

max_element和min_element使用

头文件 #include<alorithm> 作用 用于返回数组或容器中最值元素(最小值、最大值)&#xff0c;值和下标。 使用举例 #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {/*数组初始化*/vector<int>…

软件设计师软考题目解析05 --每日五题

想说的话&#xff1a;要准备软考了。0.0&#xff0c;其实我是不想考的&#xff0c;但是吧&#xff0c;由于本人已经学完所有知识了&#xff0c;只是被学校的课程给锁在那里了&#xff0c;不然早找工作去了。寻思着反正也无聊&#xff0c;就考个证玩玩。 本人github地址&#xf…

微信小程序返回上一级页面并自动刷新数据

文章目录 前言一、获取小程序栈二、生命周期触发总结 前言 界面由A到B&#xff0c;在由B返回A&#xff0c;触发刷新动作 一、获取小程序栈 界面A代码 shuaxin(){//此处可进行接口请求从而实现更新数据的效果console.log("刷新本页面数据啦")},界面B代码 // 返回触…

spring缓存的使用

Spring缓存使用 缓存注解 对于Spring&#xff0c;缓存组件例如EhCache是可拔插的&#xff0c;而缓存注解是通用的。 Cacheable 标记在方法或者类上&#xff0c;标识该方法或类支持缓存。Spring调用注解标识方法后会将返回值缓存到redis&#xff0c;以保证下次同条件调用该方…

C++mciSendString开发软件:音乐播放器2.0

目录 目录 目录 回顾上集代码 开始更改! 1、增加色彩特效 效果 2、增加命令行 初始化界面 获取时长 结构体 设置时长 退出 切换音乐 ......(没用的一堆玩意儿) 完整代码 回顾上集代码 #include <Button.h> #include <heker.h> #include <ARTTEXT.h> …

StopWatch的使用

StopWatch的使用 【一】简介【1】不使用StopWatch的案例【2】使用StopWatch的案例 【二】源码分析【1】查看源码【2】StopWatch优缺点&#xff1a; 【一】简介 stopWatch是org.springframework.util包下的一个工具类&#xff0c;使用它可直观的输出代码执行耗时&#xff0c;以…

MySQL--索引结构

索引-索引结构 1. 概述2. 二叉树3. B-Tree4. BTree5. Hash 1. 概述 MySQL的索引是在存储引擎层实现的&#xff0c;不同的存储引擎有不同的索引结构&#xff0c;主要包含以下几种&#xff1a; 上述是MySQL中所支持的所有的索引结构&#xff0c;下面展示不同的存储引擎对于索引…

JDK下载安装

资源展示 安装说明 傻瓜式安装&#xff0c;下一步即可。建议&#xff1a;安装路径不要有中文或者空格等特殊符号。本套课程会同时安装JDK8 和 JDK17&#xff0c;并以JDK17为默认版本进行讲解。 安装步骤 &#xff08;1&#xff09;双击jdk-17_windows-x64_bin.exe文件&#…

【Eureka详细讲解】

Eureka介绍和使用 1. Eureka 介绍2. Eureka 的主要特点3. 使用3.1 设置 Eureka Server3.2 设置 Eureka Client3.3 Eureka Server 高可用配置 1. Eureka 介绍 Eureka 是由 Netflix 开源的一种服务发现解决方案&#xff0c;它是 Netflix OSS 套件中的一个组件&#xff0c;经常用…

8-pytorch-损失函数与反向传播

b站小土堆pytorch教程学习笔记 根据loss更新模型参数 1.计算实际输出与目标之间的差距 2.为我们更新输出提供一定的依据&#xff08;反向传播&#xff09; 1 MSEloss import torch from torch.nn import L1Loss from torch import nninputstorch.tensor([1,2,3],dtypetorch.fl…

(只需三步)免费使用知网的攻略

通过浙江图书馆可以进入知网&#xff0c;并且查看与下载都是免费的。 &#xff08;只需要三步&#xff0c;很简单的。&#xff09; 第一步&#xff1a;注册浙江图书馆账号 打开zfb&#xff0c;搜索“浙江图书馆”小程序&#xff0c;进入个人中心->办理读者证&#xff0c;…

不同尺度下的网络控制方式

《三国演义》和《长安十二时辰》有什么不同&#xff1f; 关羽败走麦城&#xff0c;远在千里之外的刘备收到两个信号&#xff0c;一个需要 “星夜驰援”&#xff0c;紧接着 “二弟休矣”&#xff0c;三国的故事在东亚大陆展开&#xff0c;地理尺度巨大&#xff0c;星夜不星夜其…

PHP语言检测用户输入密码及调用Python脚本

现在有一份计算流体力学N-S方程的Python脚本&#xff0c;想要在用户登录网站后可以可以运行该脚本&#xff0c;然后将脚本运行后绘制的图片显示在用户网页上。 建一个名为N_S.py的python脚本文件&#xff0c;这个脚本在生成图像后会自行关闭&#xff0c;随后将图片保存在指定的…

一篇超级最全的python基础篇

1.数据类型和变量 Python使用缩进来组织代码块,一般使用4个空格的缩进.使用#来注释一行,其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块.Python对大小写敏感. 1.1 整数 Python可以处理任意大小的整数,包括负整数,写法与数学上写法一致,例如:-100.如果用十六…

【文本编辑器,哪款适合你?】讲解

文本编辑器&#xff0c;哪款适合你? 文本编辑器介绍 文本编辑器介绍 电脑使用者在选择文本编辑器时&#xff0c;应该考虑以下几个方面&#xff1a; 需求&#xff1a;你是需要进行基本的文字处理工作&#xff0c;比如写作业或者制作报告&#xff0c;还是需要使用到高级功能&am…

BIO实战、NIO编程与直接内存、零拷贝深入辨析

BIO实战、NIO编程与直接内存、零拷贝深入辨析 长连接、短连接 长连接 socket连接后不管是否使用都会保持连接状态多用于操作频繁&#xff0c;点对点的通讯&#xff0c;避免频繁socket创建造成资源浪费&#xff0c;比如TCP 短连接 socket连接后发送完数据后就断开早期的http服…

简单上手若依框架

简介 若依是一个基于SpringBoot&#xff0c;Shiro&#xff0c;Mybatis的权限后台管理系统官网文档&#xff1a;介绍 | RuoYi源码 前后端不分离 RuoYi: &#x1f389; 基于SpringBoot的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重…

InfluxDB的常用数据操作

1.插入语句 # INSERT语句用于向数据库中插入数据点&#xff08;数据行&#xff09;。 # 这些数据点包含时间戳、测量&#xff08;measurement&#xff09;、标签&#xff08;tags&#xff09;和字段&#xff08;fields&#xff09;等信息。 # 以下是INSERT语句的基本语法 INSE…

C++面试:内存溢出、内存泄漏的原因与解决

目录 内存溢出&#xff08;Memory Overflow&#xff09; 内存溢出介绍 解决内存溢出问题的方法 内存泄漏&#xff08;Memory Leak&#xff09; 内存泄露基础 解决内存泄漏问题的方法 内存溢出&#xff08;Memory Overflow&#xff09; 内存溢出介绍 内存溢出是指程序在执…