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

news/2024/4/28 21:38:04/文章来源:https://blog.csdn.net/mitongxue/article/details/128053925

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*bcout<<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.luyixian.cn/news_show_37236.aspx

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

相关文章

【点云处理】点云法向量估计及其加速(4)

上篇文章【点云处理】点云法向量估计及其加速(3)介绍了如何使用pcl提供的gpu版本法向量计算接口对点云发向量计算进行加速。不足之处在于点云k近邻查找依然比较耗时&#xff0c;成为影响整体计算性能的瓶颈。这篇文章就如何优化点云K近邻查找效率进行实验。上一篇文章的示例代码…

想要精通算法和SQL的成长之路 - 无重叠区间

想要精通算法和SQL的成长之路 - 无重叠区间前言一. 无重叠区间前言 想要精通算法和SQL的成长之路 - 系列导航 一. 无重叠区间 原题链接 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互…

谷粒学苑_第十天

第十天 视频删除 后端 相关sdk在阿里云视频点播文档的服务端SDK–>Java SDK–>媒资管理–>删除视频 复制前面的InitObject到utils里 删除的方法 DeleteMapping("{id}")public R removeAliyunVideo(PathVariable String id){try{DefaultAcsClient defau…

1000套web前端期末大作业 HTML+CSS+JavaScript网页设计实例 企业网站制作【建议收藏】

一、1000套HTML期末学生结课大作业作品(HTMLCSSJS) 这8年来做了1000多套(HTMLCSSJS)网页设计的学生期末大作业&#xff0c;都是给学生定制的都符合学校或者学生考试期末作业的水平&#xff0c;都是divcss框架原创代码写的&#xff0c;有的有js&#xff0c;有的视频音乐flash的…

Mongodb操作基础 分片

Mongodb分片 MongoDB分片是MongoDB支持的另一种集群形式&#xff0c;它可以满足MongoDB数据量呈爆发式增长的需求。当MongoDB存储海量的数据时&#xff0c;一台机器可能无法满足数据存储的需求&#xff0c;也可能无法提供可接受的读写吞吐量&#xff0c;这时&#xff0c;我们就…

【算法】2022第五届“传智杯”全国大学生计算机大赛(练习赛)

【参考&#xff1a;第五届“传智杯”全国大学生计算机大赛&#xff08;练习赛&#xff09; - 洛谷 | 计算机科学教育新生态】 练习赛满分程序&#xff08;多语言&#xff09;&#xff1a;https://www.luogu.com.cn/paste/fi60s4yu CPU一秒大概运行 10810^8108 次&#xff0c;…

ASEMI肖特基二极管MBR40200PT参数,MBR40200PT规格

编辑-Z ASEMI肖特基二极管MBR40200PT参数&#xff1a; 型号&#xff1a;MBR40200PT 最大重复峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;200V 最大平均正向整流输出电流&#xff08;IF&#xff09;&#xff1a;40A 峰值正向浪涌电流&#xff08;IFSM&#xff0…

imx6ull pro BSP 工具链

BSP&#xff0c;Board Support Package&#xff0c;指板级支持包&#xff0c;是构建嵌入式操作系统所 需的引导程序(Bootload)、内核(Kernel)、根文件系统(Rootfs)和工具链 (Toolchain)。 每种开发板的 BSP 都不一样&#xff0c;并且这些源码都非常庞大。我们把这些源码都 放在…

自动化运维CICD

目录 概述 为什么持续集成和发布可以提高效率 如何实现 1、在linux服务器安装部署代码仓库 2、安装jenkins 使用shell脚本实现CICD 使用pipeline实现CICD 使用Blue Ocean实现CICD 概述 持续集成&#xff08;Continuous Integration&#xff0c;CI)和持续发布&#xff0…

二、进程管理(四)经典同步互斥问题

目录 4.1生产者-消费者问题 4.1.1单类生产者-单类消费者问题 4.1.2多类生产者-多类消费者问题 4.1.3吸烟者问题 4.2读者-写者问题 4.3哲学家进餐问题 分析进程同步和互斥问题的三步&#xff1a; 关系分析&#xff1a;分析问题中的同步&#xff08;前驱关系&#xff09;、…

【网络】tcpdump、Wireshark 案例超详细介绍

文章目录网络分层应用层找到服务器的 IP查接口、对象的耗时删除指定网站的Cookie表示层、会话层tcpdump、wireshard传输层telnet: 路径可达性测试nc: 路径可达性测试netstat&#xff1a;查看当前连接状态iftop&#xff1a;查看当前连接的传输速率netstat -s: 查看丢包和乱序的统…

数据结构(5)树形结构——二叉搜索树(JAVA代码实现)

5.1.概述 二叉搜索树&#xff0c;也叫二叉查找树、二叉排序树&#xff0c;顾名思义&#xff0c;这种二叉树是专门用来进行数据查找的二叉树。二叉搜索树的查找其实就是二分查找。 二叉搜索树的定义&#xff1a; 二叉搜索树可以为空如果二叉搜索树不为空&#xff0c;那么每个…

Visual C++ 2010开发的程序在其它电脑上运行提示“找不到MSVCR100D.dll”原因及解决

Visual C 2010开发的程序在其它电脑上运行提示“找不到MSVCR100D.dll”原因及解决 Microsoft Visual C&#xff08;简称Visual C、MSVC、VS或VC&#xff09;2010是微软公司的免费C开发工具&#xff0c;具有集成开发环境&#xff0c;可提供编辑C语言&#xff0c;C以及C/CLI等编程…

Java项目:JSP手机商城管理系统包含前台

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;分为管理员与普通用户两种角色&#xff0c;管理员登录后台&#xff0c;普通用户登录前台&#xff1b; 管理员角色…

大数据_什么是数据中台?

目录 一、数据中台的定义 二、数据中台必备的是个核心能力 三、数据中台VS业务中台 四、数据中台VS数据仓库 五、数据中台VS现有信息架构 六、数据中台的业务价值与技术价值 一、数据中台的定义 数据中台是一套可持续“让企业的数据用起来”的机制&#xff0c;是一种战略…

[附源码]计算机毕业设计JAVA人力资源管理系统论文2022

[附源码]计算机毕业设计JAVA人力资源管理系统论文2022 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM…

第8章 综合案例—构建DVD租赁商店数据仓库

目录 章节概要 案例背景介绍 数据仓库的架构模型 数据仓库的架构模型 数据库sakila的下载和安装 数据库sakila简介 数据库sakila中 数据表之间的关系 数据表简介 用于储存电影基本信息及相关介绍的数据&#xff0c;该数据表各个字段的含义如表。 用于储存定义电影id所…

Kafka生产者之分区

一、分区好处 &#xff08;1&#xff09;便于合理使用存储资源&#xff0c;每个Partition在一个Broker上存储&#xff0c;可以把海量的数据按照分区切割成一块一块数据存储在多台Broker上。合理控制分区的任务&#xff0c;可以实现负载均衡的效果&#xff1b; &#xff08;2&…

惊喜:2023前瞻版Java面试指南,不止八股文

前言&#xff1a; 2022年马上就要过去了&#xff0c;即将要到来的就是2023年的金三银四面试季&#xff0c;随着政策的放宽&#xff0c;经济的逐步复苏&#xff0c;岗位的需求也会越来越大&#xff0c;所以趁这段时间进行知识储备将会是最好的时间段&#xff0c;永远要做快人一…

智能疾病查询接口

一、接口介绍 最全的疾病大全&#xff0c;收集了数万种常见疾病&#xff0c;任何常见疾病都可查询。 二、功能体验 三、API文档 3.1 查询疾病科目 3.1.1接入点说明 查询疾病的类别。 3.1.2接口地址 http[s]&#x1f615;/www.idmayi.com/546-1?idmayi_appid替换自己的值&…