C++编译预处理
目录
一、包含头文件
1)#include包含头文件又两种方式:
①#include<文件名>:
②#include"文件名":
2)C++98标准后的头文件:
①C的标准库
②C++的标准库
3)注意
二、宏定义
1)分类
①无参数的宏
②有参数的宏
③注意
2)C++中常用的宏
(1)用于调试和日志文件
(2)用于软件版本信息
三、条件编译
1)分类
①#ifdef
②#ifndef
四、解决头文件中代码重复包含的问题
1)分类
①第一种
②第二种
③注意
C++程序编译的过程:预处理->编译(优化、汇编)->链接
预处理指令主要有以下三种
1)包含头文件:#include
2)宏定义:#define(定义宏)、#undef(删除洪)
3)条件编译:#ifdef、#ifndef
一、包含头文件
1)#include包含头文件又两种方式:
①#include<文件名>:
直接从编译器自带的函数库目录(系统头文件)中寻找文件。
②#include"文件名":
先从自定义的目录中寻找文件,如果找不到,再从编译器中寻找。
#include也包含其他的文件,如:*h、*cpp或其它的文件。
2)C++98标准后的头文件:
①C的标准库
老版本有.h后缀,新版本没有.h后缀,增加了字符的前缀,例如老版本是<stdio.h>,新版本是<cstdio>,库中内容是一样的,新老版本都可以用。在程序中,不指定std命名空间
②C++的标准库
老版本的有.h后缀,新版本没有.h后缀。例如新版本是<iostream>,老版本已经弃用,只能用新版本。在程序中,用库中的内容。
3)注意
用户自定义的头文件还是要用.h为后缀
二、宏定义
1)分类
①无参数的宏
#define 宏名 宏内容
②有参数的宏
#define MAX( x , y ) ( (x) > (y) ? (x) : (y) ) (像函数也不是函数,少用)
③注意
编译的时候,编译器把程序中的宏名用宏内容替换,是为宏展开(宏替换)。
宏可以只有宏名,没有后面的宏内容。
在C++中,内联函数可以替代有参数的宏,效果更好。
2)C++中常用的宏
(1)用于调试和日志文件
①当前源代码文件名:__FILE__
②当前源代码函数名:__FUNCTION__
③当前源代码行号:__LINE__
(2)用于软件版本信息
④编译的日期:__DATE__
⑤编译的时间:__TIME__
⑥编译的时间戳:__TIMESTAMP__
⑦当用C++编译程序时,宏_cplusplus就会被定义。(区别C和C++)
三、条件编译
是条件编译指令,不是条件判断语句
1)分类
最常用的两种:#ifdef、#ifndef if #define if not #define
①#ifdef
#ifdef 宏名
程序段一
#else
程序段二
#endif
含义:如果#ifdef后面的宏名已存在,则使用程序段一,否则使用程序段二。
②#ifndef
#ifndef 宏名
程序段一
#else
程序段二
#endif
含义:如果#ifndef后面的宏名不存在,则使用程序段一,否则使用程序段二。
四、解决头文件中代码重复包含的问题
1)分类
在C/C++中,在使用预编译指令#include的时候,为了防止头文件被重复包含,有两种方式。
①第一种
用#ifndef指令
#ifndef 宏名
#define 宏名
//代码内容
#endif
②第二种
用#pragma once指令放在文件的开头
③注意
#ifndef方式受C/C++语言标准的支持,不受编译器的任何限制;而#pragma once方式有些编译器不支持。
#ifndef可以针对文件中的部分代码;而#pragma once只能针对整个文件。
相关文章:
C++编译预处理
目录 一、包含头文件 1)#include包含头文件又两种方式: ①#include<文件名>: ②#include"文件名": 2)C98标准后的头文件: ①C的标准库 ②C的标准库 3)注意 二、宏定义 1…...
Spring IOC 的理解
IoC容器是什么? IoC文英全称Inversion of Control,即控制反转,我么可以这么理解IoC容器: “把某些业务对象的的控制权交给一个平台或者框架来同一管理,这个同一管理的平台可以称为IoC 容器。” 我们刚开始学习…...
Linux 学习笔记(七):时间片
一、时间片概念 时间片(timeslice)又称为 “量子”(quantum)或 “处理器片”(processor slice),是分时操作系统分配给每个正在运行的进程微观上的一段 CPU 时间(在抢占内核中是&…...
java并发-ReentrantLock
当多个线程需要同时对共享资源进行操作时,就需要用到线程同步技术。Java中提供了synchronized关键字用于线程同步,而ReentrantLock就是另外一种用于线程同步的技术,本文将介绍ReentrantLock及其使用方法。 ### 1. 概述 ReentrantLock是Java…...
21.模型的访问器和修改器
学习要点: 1.访问器 2.修改器 本节课我们来开始学习数据库模型的访问器和修改器的使用。 一.访问器 1. 访问器:就是在获取数据列表时,拦截属性并对属性进行修改的过程; 2. 比如,我们在输出性别时࿰…...
72 yaffs文件系统挂载慢 sync不起作用
1 引言 最近在开放过程中遇到了一个问题:Linux在启动挂载根文件系统时很慢很慢!而且每次开机都是这样,一下子让人难以理解。 因为,理论上当机器第一次启动,会扫描完整的rootfs的flash区域,从而建立索引&…...
【无标题】春漫乌海湖!
春漫乌海湖! 杨桂林 黄河流经几字弯内蒙古段的第一段便遇见了镶嵌在大漠中的璀璨明珠乌海湖。 谁也不会相信:这里被乌兰布和、库布其、毛乌素三大沙漠重重包围,矿山林立,煤尘喧嚣飞扬的黑色煤都,如今在金色沙海的映衬下,柔润潋滟周…...
Red Hat重置root密码
目录 前言 1、使用rd.break参数重置root密码 2、使用安装盘重置root密码 前言 我们有时会忘记linux系统的root密码,有的不会重置密码只能重置系统了,下面介绍两种重置root密码的方法 1、使用rd.break参数重置root密码 1、启动系统,并在…...
应急响应之日志排查方法,Linux篇
应急响应之日志排查方法,Linux篇 1.Linux系统日志位置2.Linux日志分析方法3.其他日志的分析中间件日志其他服务日志1.Linux系统日志位置 Linux 系统中的日志一般存放在目录“/var/log/”下,具体的日志功能如下 /var/log/wtmp:记录登录进入、退出、数据交换、关机和重启,即…...
Midjourney AI 官方中文版已开启内测申请;OpenAI 正准备向公众发布一款新的开源语言模型。
🚀 Midjourney AI 官方中文版已开启内测申请,搭载在 QQ 频道上,召唤机器人进行作画。 Midjourney AI 官方中文版已开启内测申请,搭载在 QQ 频道上,召唤机器人进行作画。 可调用 MJ 和 Niji 的最新模型和所有参数&…...
DevOps 的道术法器,探寻 DevOps “立体化”实践之旅
引言 随着业务的发展,软件发布迭代的频率越来越高,传统的瀑布型模式已经不能满足快速交付的需求,DevOps 也因此受到持续关注。越来越多的公司开始接受并尝试使用 DevOps,期望能使得软件开发中的构建、测试与发布工作变得更加快捷…...
redis 7.x 缓存双写一致性的解决方案
一 redis缓存双写一致性 1.1 保证redis一致性的原则 1.给缓存设置过期时间,定期清理缓存并写回,是保证最终一致性的解决方案。使用场景:在数据读多写少的情况下作为缓存来使用。 我们可以对已存入缓存的数据设置过期时间,所有…...
真题详解(语法分析输入记号流)-软件设计(八十)
真题详解(求叶子结点数)-软件设计(七十九)https://blog.csdn.net/ke1ying/article/details/130787349?spm1001.2014.3001.5501 极限编程XP最佳实践: 测试先行、 按日甚至按小时为客户提供可运行的版本。 组件图的 插座 和插头…...
ffmpeg-编译汇总01
ffmpeg-编译汇总 ubuntu18.04下编译ffmpeg 所有安装目录 /usr/local 1.nasm编译器编译 (nasm-2.13.03解包) ./configure --prefix/usr/local make -j4 sudo make install 注意:能检测到可以不用设置下面的环境。 安装完成后,为了系统能自动找到nasm程序&…...
素雅的登录界面,简单而优雅
先上效果图: 再上代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>*, *::after, *::before {margin: 0;padding: 0;box-sizing: bord…...
Docker数据目录迁移方法
文章目录 前言一、停掉Docker服务?二、迁移docker数据到数据盘目三、备份原数据目录四、添加软链接五、重启docker服务六、确认服务没有问题后,删除备份的目录总结 前言 服务器上安装的docker服务,数据默认存储在/var/lib/docker目录&#x…...
C++——动态规划
动态规划是一种解决复杂问题的算法思想。它通过将问题分解为更小的子问题,并利用子问题的解来构建原问题的解。动态规划通常用于优化问题,其中需要找到最优解或最大值/最小值。 动态规划的核心思想是存储并重复使用子问题的解,以避免重复计算…...
【FAQ】视频编辑服务常见问题及解答
Q1问题描述 1、 访问贴纸等素材的时候提示“网络异常,请重试”怎么办? 2、 使用AI能力时,提示“errorCode:20124 errorMsg:Method not Allowed”? 解决方案 请做以下检查: 1、 在代码中检查鉴权信息是否已设置。如…...
JavaEE(系列8) -- 多线程案例(单例模式)
目录 1. 设计模式 2. 单例模式 -- 饿汉模式 3. 单例模式 -- 懒汉模式 4. 单例模式(懒汉模式-多线程) 1. 设计模式 什么是设计模式? 设计模式好比象棋中的 "棋谱". 红方当头炮, 黑方马来跳. 针对红方的一些走法, 黑方应招的时候有一些固定的套路. 按照套路…...
深度剖析,如何从底层代码层面理解Selenium和Appium的关联
目录 前言: 一、Selenium和WebDriver 二、Appium和WebDriver 三、Selenium和Appium的底层关联 1. Selenium WebDriver提供底层的浏览器控制机制 2. 利用JSON Wire Protocol通信协议实现通讯机制 四、实例代码 总结: 前言: Selenium和…...
嘈杂工业场景下的自适应VAD与双码本声纹识别鉴权系统:基于端侧轻量化神经网络与向量量化(VQ)重构
在大型化工车间、能源集控中心以及金融极密隔离库房中,离线声纹识别是物理访问控制和身份安全核验的重要生物特征屏障。然而,在环境本底噪声高达80dB以上的恶劣工业场景下,常规的语音活动检测(VAD)会频繁误触ÿ…...
告别Selenium?手把手教你用Playwright录制脚本,5分钟搞定Web自动化测试
5分钟极速上手Playwright脚本录制:零代码实现Web自动化测试当产品经理突然丢给你一个刚上线的电商活动页,要求半小时内完成所有核心链路测试时,传统的手写Selenium脚本显然来不及。作为测试工程师,我最近发现微软开源的Playwright…...
TorchEasyRec:阿里巴巴开源的推荐系统深度学习框架详解
第一部分:项目概览与核心功能 一、项目简介:什么是 TorchEasyRec? TorchEasyRec 是阿里巴巴 PAI 团队开发的基于 PyTorch 的推荐系统框架,专门用于构建生产级别的深度学习推荐模型。简单来说,它就是一个让你能够快速…...
无声输入革命:如何用Chaplin在5分钟内构建本地唇语识别系统
无声输入革命:如何用Chaplin在5分钟内构建本地唇语识别系统 【免费下载链接】chaplin A real-time silent speech recognition tool. 项目地址: https://gitcode.com/gh_mirrors/chapl/chaplin 在嘈杂的办公室、安静的图书馆,或是需要绝对隐私的医…...
剖析爆炸事故失联成因,UWB穿戴模式隐患重重,无感定位筑牢矿山透明化空间管理根基
剖析爆炸事故失联成因,UWB穿戴模式隐患重重,无感定位筑牢矿山透明化空间管理根基一、爆炸事故深度溯源:井下人员大面积失联核心诱因矿山瓦斯爆炸突发灾害,瞬间伴随剧烈冲击、粉尘弥漫、巷道形变、线路损毁与人员紧急避险疏散&…...
Go语言调试技巧:Delve调试器
Go语言调试技巧:Delve调试器 1. Delve使用 dlv debug main.go (dlv) breakpoint main.go:10 (dlv) continue2. 总结 Delve是Go语言的官方调试器,支持断点、单步执行等调试功能。...
如何精准识别高校院所与企业之间的潜在合作机会?
核心要点 传统“相亲角”式校企对接效率低下,根源在于科研供给与市场需求间的信息断层,必须转向以数据驱动、模型研判为核心的精准识别机制,才能将模糊的产学研线索转化为可落地的合作机会。精准识别合作机会的关键在于分拆为“供给侧”与“需…...
从酒店评论到情感分析:手把手教你用fastText做文本分类(Python实战避坑指南)
从酒店评论到情感分析:fastText文本分类实战全解析 当产品经理甩给你一份未经处理的酒店评论数据集,要求48小时内给出情感倾向分析报告时,作为工程师的你该如何应对?本文将带你用fastText这个轻量级工具,从原始数据到…...
5个理由告诉你为什么Mermaid Live Editor是图表创作的效率神器
5个理由告诉你为什么Mermaid Live Editor是图表创作的效率神器 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor …...
Spiderbuf_H05时间戳机制深度解析:锚点偏移与服务端校验
1. 这不是“破解”,是时间戳反爬机制的逆向解构你打开浏览器按F12,切到Network面板,刷新页面,盯着XHR请求发呆——那个带一长串数字的timestamp参数,每次刷新都变,但又不是随机乱跳,而是和当前时…...
