【C++中预处理语句 include、define、if】

news2025/7/15 15:33:21

1.预处理阶段

一般执行过程
预处理阶段,在实际发生编译之前就根据对应的预处理语句进行操作,等到预处理阶段完成之后才进行编译阶段 。

2.预处理语句

预处理语句主要有include、define、if 和 program。利用 # 进行标记

2.1 include语句

include语句就是将所包含的文件给复制到当前文件中.

//Math1.h
}

//math11.cpp
int sum_(int a, int b) {
	return a + b;
#include"Math1.h"  //等价于 }

上诉代码中,利用include进行预处理,直接将"Math1.h"中的内容直接赋值过来。后面编译器编译math11.cpp实际上的内部执行内容是

#line 1 "C:\\dev\\cppstudy\\hello\\hello\\math11.cpp"
int sum_(int a, int b) {
	return a + b;
#line 1 "C:\\dev\\cppstudy\\hello\\hello\\Math1.h"
}
#line 4 "C:\\dev\\cppstudy\\hello\\hello\\math11.cpp"

也就是

int sum_(int a, int b) {
	return a + b;
}

2.2 define语句

define语句底层实现就是一个简单的字符串替换,就是将指定的字符串替换成为目标字符串,然后再进行编译

//math22.cpp
#define INTEGER int
INTEGER sum_(INTEGER a, INTEGER b) {
	return a + b;
}

实际上,在预处理阶段,将字符串 INTEGER 替换成 int,然后再对文件进行编译,编译的实质内容是:

int sum_(int a, int b) {
	return a + b;
}

通过运行下面这个例子,可以帮助你更好理解

#include<iostream>
#define SUM(a,b) a+b
using namespace std;
int main(){
	int a=2,b=3;
	int c=a*SUM(a,b)*b;//直接替换 c=a*a+b*b
	cout<<c;//13 并不是30
}

2.3 if语句

​ if处理语句可以帮助我们包含或者排除基于条件的代码。

#if 1
int sum_(int a, int b) {
	return a + b;
}
#endif

因为条件为 1,所以编译器会编译 #if 与 #endif 直接的语句,编译的实质内容是:

int sum_(int a, int b) {
	return a + b;
}

如果if条件为0 则不会编译其中的内容

2.4 progra语句

所有 预处理 其中, #pragma 应该最复杂了。
它的作用是设定 编译器 的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。这里就不进行过多的介绍。有兴趣的可以自己了解。

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

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

相关文章

if-else练习

if单分支 输入两个数&#xff0c;分别放入x和y中&#xff0c;若两数不相等&#xff0c;则输出其中的大数&#xff0c;若两数相等&#xff0c;则输出字符串“xy&#xff1a;”并输出其值 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int a 0;int …

智慧油田解决方案-最新全套文件

智慧油田解决方案-最新全套文件一、建设背景1、智慧油田的概念及意义2、智慧油田的建设目标二、建设思路三、建设方案四、获取 - 智慧油田全套最新解决方案合集一、建设背景 1、智慧油田的概念及意义 石油产量、采收率、安全生产等都与石油工业未来息息相关&#xff0c;随着石…

十八、CANdelaStudio深入-Data Types

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的Data Types(数据类型),欢迎各位朋友订…

旧系统改造

背景 很多时候&#xff0c;我们在项目前期会优先确保项目业务的落地&#xff0c;在短时间内进行项目冲刺&#xff0c;最后完成项目上线。这样做让短时间内的目标达貌似达成了&#xff0c;却给系统留下了很大的隐患。 在项目的冲刺过程中&#xff0c;我们的精力大部分花在了业…

动态规划-不同路径

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; 示例 …

单源广度优先搜索 (leetcode经典例题 C++实现)

文章目录01矩阵地图分析腐烂的橘子深度优先搜索与广度优先搜索前情回顾&#xff1a; 深度搜索dfs与广度搜索bfs算法总结&#xff08;c 例题&#xff09; 本节是广度优先搜索的进阶&#xff1a; 01矩阵 传送门&#xff1a; https://leetcode.cn/problems/01-matrix/?envType…

JavaWeb----Servlet技术

JavaEE简介 什么是JavaEE JavaEE&#xff08;Java Enterprise Edition&#xff09;&#xff0c;Java企业版&#xff0c;是一个用于企业 级web开发平台,它是一组Specification。最早由Sun公司定制并发 布&#xff0c;后由Oracle负责维护。在JavaEE平台规范了在开发企业级web 应…

【操作系统】死锁(详细)

文章目录一、死锁的概念二、死锁的产生因素三、死锁的必要条件1、互斥条件2、占有和等待条件&#xff08;部分分配条件&#xff09;3、不剥夺条件4、循环等待条件&#xff08;环路条件&#xff09;四、死锁防止1、破坏互斥条件2、破坏占有和等待条件3、破坏不剥夺条件4、破坏循…

Ceph文件系统

目录 一、环境准备 二、什么是文件系统 三、ceph块存储与文件系统区别 四、创建ceph文件系统 1、启动MDS服务 2、创建存储池 3、创建Ceph文件系统 4、客户端挂载 一、环境准备 Ceph集群搭建参照&#xff1a;Ceph集群部署_桂安俊kylinOS的博客-CSDN博客 以下Ceph存储实…

springcloud22:sentinal的使用

sentinal对比&#xff08;分布式系统的流量防卫&#xff09; 监控保护微服务 Hystrix 需要自己去手工搭建监控平台&#xff0c;没有一套web界面可以进行细粒度化的配置&#xff0c;流控&#xff0c;速率控制&#xff0c;服务熔断&#xff0c;服务降级… 整合机制&#xff1a;se…

外卖项目08---Linux

目录 一、 Linux简介 119 二、Linux安装 120 三、常用命令 122 3.1Linux命令初体验 3.1.1 command [-options] [parameter] 3.2Linux常用命令---文件目录操作命令-ls&-cd&-cat 124 3.2.1list 3.2.2 cd 3.2.3 cat 3.3 Linux常用命令---文件目录操作命令…

9.前端笔记-CSS-CSS三大特性

三大特性&#xff1a;层叠性、继承性、优先级 1、层叠性&#xff08;覆盖性&#xff09; 给相同的选择器设置相同的样式&#xff0c;此时一个样式会覆盖&#xff08;层叠&#xff09;其他冲突的样式。 层叠性原则&#xff1a; 同一选择器&#xff0c;样式冲突&#xff0c;遵…

OpenMV输出PWM,实现对舵机控制

OpenMV的定时器官方函数介绍&#xff1a;Timer类 – 控制内部定时器 目录 OpenMV的PWM资源介绍 为什么要用OpenMV输出PWM OpenMV的PWM资源分配 资源 注意 建议 PWM输出代码 代码讲解 Timer Timer.channel tim.channel与Timer.channel区别 Timer.channel解析 OpenM…

Iframe通信

跨域的种类 一般有两种形式的跨域问题&#xff1a; ①使用XmlHttpRequest(XHR)或者使用AJAX发送的POST或者GET请求。这种形式的跨域是&#xff1a;前端页面与后端进行的跨域请求。 ②父子页面之间进行的DOM操作&#xff08;父子窗口之间的document操作&#xff09;。这种形式…

使用XShell、XFTP 连接 win7 虚拟机(windows、Linux无法远程登录问题)

文章目录前言出错原因&#xff08;题外话&#xff09;那么我们为什么要使用 SSH 连接开始操作&#xff08;Windows7&#xff09;首先进行 SSH 测试获取所需的openSSH文件安装openSSH添加环境变量ssh测试发布ssh服务开始操作&#xff08;Linux&#xff0c;以Ubuntu为例&#xff…

Linux启动流程分析

一、Linux启动流程图 二、硬件启动流程 2.1、POST Linux开机加电后&#xff0c;系统开始开机自检&#xff0c;该过程主要对计算机各种硬件设备进行检测&#xff0c;如CPU、内存、主板、硬盘、CMOS芯片等。主要完成检测硬件能否满足运行的基本条件&#xff0c;叫做“硬件自检(P…

【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)

&#x1f3c6;个人主页&#xff1a;企鹅不叫的博客 ​ &#x1f308;专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接&#xff1a;代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

onnx-modifier使用

文章目录**0、作用和功能****1、准备****2、界面介绍****3、注意tips**onnx-modifier基于流行的模型可视化工具 Netron 和轻量级Web应用框架 flask 开发。希望它能给社区带来一些贡献0、作用和功能 经常作为不同框架模型转化的中间文件&#xff0c;拿到ONNX文件&#xff0c;想…

KMP算法【一句话概括什么是KMP】【手写 求next数组】【手写匹配过程】

这里写自定义目录标题1. 什么是KMP算法2. next数组的表示含义怎么算3. 匹配过程例题——KMP字符串1. 什么是KMP算法 KMP算法&#xff1a;给定abcabm字符串和abcabcabm字符串&#xff0c;求前面字符串在后面字符串出现的位置&#xff0c;我们从头开始依次遍历&#xff0c;当遍历…

Supervisor - 用户进程监控利器

Supervisor Supervisor 是一个客户端/服务器系统&#xff0c;允许用户在UNIX操作系统上监视、控制用户进程。从定义里面分析包含两层意思。 监控进程 - 监控进程状态 确定当前进程是否发生异常控制进程 - 针对进程异常情况 控制进程的行为 如重启当前进程 Supervisor 通过 F…