当前位置: 首页 > news >正文

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&#xff09;#include包含头文件又两种方式&#xff1a; ①#include<文件名>: ②#include"文件名"&#xff1a; 2&#xff09;C98标准后的头文件&#xff1a; ①C的标准库 ②C的标准库 3&#xff09;注意 二、宏定义 1&#xf…...

Spring IOC 的理解

IoC容器是什么&#xff1f; IoC文英全称Inversion of Control&#xff0c;即控制反转&#xff0c;我么可以这么理解IoC容器&#xff1a; “把某些业务对象的的控制权交给一个平台或者框架来同一管理&#xff0c;这个同一管理的平台可以称为IoC 容器。” 我们刚开始学习…...

Linux 学习笔记(七):时间片

一、时间片概念 时间片&#xff08;timeslice&#xff09;又称为 “量子”&#xff08;quantum&#xff09;或 “处理器片”&#xff08;processor slice&#xff09;&#xff0c;是分时操作系统分配给每个正在运行的进程微观上的一段 CPU 时间&#xff08;在抢占内核中是&…...

java并发-ReentrantLock

当多个线程需要同时对共享资源进行操作时&#xff0c;就需要用到线程同步技术。Java中提供了synchronized关键字用于线程同步&#xff0c;而ReentrantLock就是另外一种用于线程同步的技术&#xff0c;本文将介绍ReentrantLock及其使用方法。 ### 1. 概述 ReentrantLock是Java…...

21.模型的访问器和修改器

学习要点&#xff1a; 1.访问器 2.修改器 本节课我们来开始学习数据库模型的访问器和修改器的使用。 一&#xff0e;访问器 1. 访问器&#xff1a;就是在获取数据列表时&#xff0c;拦截属性并对属性进行修改的过程&#xff1b; 2. 比如&#xff0c;我们在输出性别时&#xff0…...

72 yaffs文件系统挂载慢 sync不起作用

1 引言 最近在开放过程中遇到了一个问题&#xff1a;Linux在启动挂载根文件系统时很慢很慢&#xff01;而且每次开机都是这样&#xff0c;一下子让人难以理解。 因为&#xff0c;理论上当机器第一次启动&#xff0c;会扫描完整的rootfs的flash区域&#xff0c;从而建立索引&…...

【无标题】春漫乌海湖!

春漫乌海湖! 杨桂林 黄河流经几字弯内蒙古段的第一段便遇见了镶嵌在大漠中的璀璨明珠乌海湖。 谁也不会相信:这里被乌兰布和、库布其、毛乌素三大沙漠重重包围&#xff0c;矿山林立&#xff0c;煤尘喧嚣飞扬的黑色煤都&#xff0c;如今在金色沙海的映衬下&#xff0c;柔润潋滟周…...

Red Hat重置root密码

目录 前言 1、使用rd.break参数重置root密码 2、使用安装盘重置root密码 前言 我们有时会忘记linux系统的root密码&#xff0c;有的不会重置密码只能重置系统了&#xff0c;下面介绍两种重置root密码的方法 1、使用rd.break参数重置root密码 1、启动系统&#xff0c;并在…...

应急响应之日志排查方法,Linux篇

应急响应之日志排查方法,Linux篇 1.Linux系统日志位置2.Linux日志分析方法3.其他日志的分析中间件日志其他服务日志1.Linux系统日志位置 Linux 系统中的日志一般存放在目录“/var/log/”下,具体的日志功能如下 /var/log/wtmp:记录登录进入、退出、数据交换、关机和重启,即…...

Midjourney AI 官方中文版已开启内测申请;OpenAI 正准备向公众发布一款新的开源语言模型。

&#x1f680; Midjourney AI 官方中文版已开启内测申请&#xff0c;搭载在 QQ 频道上&#xff0c;召唤机器人进行作画。 Midjourney AI 官方中文版已开启内测申请&#xff0c;搭载在 QQ 频道上&#xff0c;召唤机器人进行作画。 可调用 MJ 和 Niji 的最新模型和所有参数&…...

DevOps 的道术法器,探寻 DevOps “立体化”实践之旅

​引言 随着业务的发展&#xff0c;软件发布迭代的频率越来越高&#xff0c;传统的瀑布型模式已经不能满足快速交付的需求&#xff0c;DevOps 也因此受到持续关注。越来越多的公司开始接受并尝试使用 DevOps&#xff0c;期望能使得软件开发中的构建、测试与发布工作变得更加快捷…...

redis 7.x 缓存双写一致性的解决方案

一 redis缓存双写一致性 1.1 保证redis一致性的原则 1.给缓存设置过期时间&#xff0c;定期清理缓存并写回&#xff0c;是保证最终一致性的解决方案。使用场景&#xff1a;在数据读多写少的情况下作为缓存来使用。 我们可以对已存入缓存的数据设置过期时间&#xff0c;所有…...

真题详解(语法分析输入记号流)-软件设计(八十)

真题详解&#xff08;求叶子结点数&#xff09;-软件设计&#xff08;七十九)https://blog.csdn.net/ke1ying/article/details/130787349?spm1001.2014.3001.5501 极限编程XP最佳实践&#xff1a; 测试先行、 按日甚至按小时为客户提供可运行的版本。 组件图的 插座 和插头…...

ffmpeg-编译汇总01

ffmpeg-编译汇总 ubuntu18.04下编译ffmpeg 所有安装目录 /usr/local 1.nasm编译器编译 (nasm-2.13.03解包) ./configure --prefix/usr/local make -j4 sudo make install 注意&#xff1a;能检测到可以不用设置下面的环境。 安装完成后&#xff0c;为了系统能自动找到nasm程序&…...

素雅的登录界面,简单而优雅

先上效果图&#xff1a; 再上代码&#xff1a; <!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服务&#xff1f;二、迁移docker数据到数据盘目三、备份原数据目录四、添加软链接五、重启docker服务六、确认服务没有问题后&#xff0c;删除备份的目录总结 前言 服务器上安装的docker服务&#xff0c;数据默认存储在/var/lib/docker目录&#x…...

C++——动态规划

动态规划是一种解决复杂问题的算法思想。它通过将问题分解为更小的子问题&#xff0c;并利用子问题的解来构建原问题的解。动态规划通常用于优化问题&#xff0c;其中需要找到最优解或最大值/最小值。 动态规划的核心思想是存储并重复使用子问题的解&#xff0c;以避免重复计算…...

【FAQ】视频编辑服务常见问题及解答

Q1问题描述 1、 访问贴纸等素材的时候提示“网络异常&#xff0c;请重试”怎么办&#xff1f; 2、 使用AI能力时&#xff0c;提示“errorCode:20124 errorMsg:Method not Allowed”&#xff1f; 解决方案 请做以下检查&#xff1a; 1、 在代码中检查鉴权信息是否已设置。如…...

JavaEE(系列8) -- 多线程案例(单例模式)

目录 1. 设计模式 2. 单例模式 -- 饿汉模式 3. 单例模式 -- 懒汉模式 4. 单例模式(懒汉模式-多线程) 1. 设计模式 什么是设计模式? 设计模式好比象棋中的 "棋谱". 红方当头炮, 黑方马来跳. 针对红方的一些走法, 黑方应招的时候有一些固定的套路. 按照套路…...

深度剖析,如何从底层代码层面理解Selenium和Appium的关联

目录 前言&#xff1a; 一、Selenium和WebDriver 二、Appium和WebDriver 三、Selenium和Appium的底层关联 1. Selenium WebDriver提供底层的浏览器控制机制 2. 利用JSON Wire Protocol通信协议实现通讯机制 四、实例代码 总结&#xff1a; 前言&#xff1a; Selenium和…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...