C++学习——编译的过程
编译的过程——预处理
- 引言
- 预处理
- 包含头文件
- 宏定义指令
- 条件编译
- 编译、链接
引言
C++程序编译的过程:预处理 -> 编译(优化、汇编)-> 链接
编译和链接的内容可以查阅这篇文章(点击查看)
预处理
编译预处理是指,对我们写的源代码进行预处理,生成临时文件。
预处理指令主要有以下 三种:
- 包含头文件:
#include - 宏定义:
#define(定义宏)、#undef(删除宏) - 条件编译:
#ifdef、#ifndef
包含头文件
#include包含头文件有两种方式:
#include <文件名>:直接从编译器自带的函数库目录中寻找文件。这种情况用于包含编译器自带的头文件,也叫系统文件。#include "文件名":先从自定义的目录中寻找文件,如果找不到,再从编译器自带的函数库目录中寻找。这种情况用于包含程序员自定义的头文件。
#include也包含其它的文件,如:.h、.cpp或其它的文件。#include包含文件的本质是把需要包含的文件的内容复制进来。
C++98标准后的头文件分为C标准库和C++标准库:
- C的标准库:老版本的有.h后缀;新版本没有.h的后缀,增加了字符c的前缀。例如:老版本是
<stdio.h>,新版本是<cstdio>,新老版本库中的内容是一样的。在程序中,不指定std命名空间也能使用库中的内容。 - C++的标准库:老版本的有.h后缀;新版本没有.h的后缀。例如:老版本是
<iostream.h>,新版本是<iostream>,老版本已弃用,只能用新版本。在程序中,必须指定std命名空间才能使用库中的内容。
注意:用户自定义的头文件还是用.h为后缀。
宏定义指令
- 无参数的宏:
#define 宏名 宏内容 - 有参数的宏:
#define MAX(x,y) ((x)>(y) ? (x) : (y))
编译的时候,编译器把程序中的宏名用宏内容替换,是为宏展开(宏替换)。
宏可以只有宏名,没有宏内容。
在C++中,内联函数可代替有参数的宏,效果更好。
C++中常用的宏:
- 当前源代码文件名:
__FILE__ - 当前源代码函数名:
__FUNCTION__ - 当前源代码行号:
__LINE__ - 编译的日期:
__DATE__ - 编译的时间:
__TIME__ - 编译的时间戳:
__TIMESTAMP__ - 当用C++编译程序时,宏
__cplusplus就会被定义。
可以自行打印一下宏的内容,如下:
cout << "__FILE__: " << __FILE__ << endl;
cout << "__FUNCTION__: " << __FUNCTION__ << endl;
cout << "__TIMESTAMP__: " << __TIMESTAMP__ << endl;
cout << "__cplusplus: " << __cplusplus << endl;
条件编译
最常用的两种:#ifdef、#ifndef
#ifdef 宏名程序段一
#else程序段二
#endif
含义:如果#ifdef后面的宏名已存在,则使用程序段一,否则使用程序段二。
#ifndef 宏名程序段一
#else程序段二
#endif
含义:如果#ifndef后面的宏名不存在,则使用程序段一,否则使用序段二。
什么是宏名存在?什么是不存在?
如果用#define定义宏,宏名就存在;没定义宏,宏名就不存在。宏的内容无所谓,只要有名字就行。
ifdef、ifndef、else、 endif这些是条件编译语句,与条件判断语句不是一回事。
在C++中,头文件只需要被包含一次就行了。在C/C++中,在使用预编译指令#include的时候,为了防止头文件被重复包含,有两种方式。
- 方式1:用
#ifndef指令。
#ifndef _CAR_#define _CAR_//代码内容。
#endif
- 方式2:
#pragma once指令放在文件的开头
#pargma once
#include <iostream>using namespace std:
...
#ifndef方式受C/C++语言标准的支持,不受编译器的任何限制;而#pragma once方式有些编译器不支持。
#ifndef可以针对文件中的部分代码;而#pragma once只能针对整个文件。
#ifndef更加灵活,兼容性好;#pragma once操作简单,效率高。
编译、链接
点击查看这篇文章
感谢浏览,一起学习!
相关文章:
C++学习——编译的过程
编译的过程——预处理 引言预处理包含头文件宏定义指令条件编译 编译、链接 引言 C程序编译的过程:预处理 -> 编译(优化、汇编)-> 链接 编译和链接的内容可以查阅这篇文章(点击查看) 预处理 编译预处理是指&a…...
当你要改文件 但是原来的文件内容又不能丢失的时候,拷贝一份(备注原来的),然后添加后缀:.bak
当你要改文件 但是原来的文件内容又不能丢失的时候,拷贝一份(备注原来的),然后添加后缀:.bak !!!文件不要直接删除,若你以后要还原的话会找不到...
MATLAB神经网络(五)——R-CNN视觉检测
5.1 目标分类、检测与分割 在计算机视觉领域,目标分类、检测与分割是常用计数。三者的联系与区分又在哪呢?目标分类是解决图像中的物体是什么的问题;目标检测是解决图像中的物体是什么,在哪里的问题;目标分割时将目标和…...
mock.js:定义、应用场景、安装、配置、使用
前言:什么是mock.js? 作为一个前端程序员,没有mockjs你不感觉很被动吗?你不感觉你的命脉被后端那个男人掌握了吗?所以,我命由我不由天!学学mock.js吧! mock.js 是一个用于生成随机…...
【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本
GRAPH ATTENTION NETWORKS 代码详解 前言0.引言1. 环境配置2. 代码的运行2.1 报错处理2.2 运行结果展示 3.总结 前言 在前文中,我们已经深入探讨了图卷积神经网络和图注意力网络的理论基础。还没看的同学点这里补习下。接下来,将开启一个新的阶段&#…...
Transformer中的Self-Attention机制如何自然地适应于目标检测任务
Transformer中的Self-Attention机制如何自然地适应于目标检测任务: 特征图的降维与重塑 首先,Backbone(如ResNet、VGG等)会输出一个特征图,这个特征图通常具有较高的通道数、高度和宽度(例如CHWÿ…...
2411rust,1.75.0
原文 Rust团队很高兴地声明推出Rust的新版本1.75.0. 如果你rustup安装了以前版本的Rust,你可如下取1.75.0: $ rustup update stable1.75.0稳定版中的功能 async fn和特征中的返回位置impl Trait. 指针字节偏移API 原始指针(*const T和*mutT)过去主要支持,T为单位的操作.如…...
远程办公新宠:分享8款知识共享软件
远程办公模式下,知识共享软件成为了团队协作和沟通的重要工具。以下是8款备受推崇的知识共享软件: 1、HelpLook AI知识库 简介:HelpLook是一款快速搭建AI知识库的系统,具备强大功能,如快速精准的知识检索、灵活定制的…...
3.9MayBeSomeAssembly
就是先从数组里,乘4得到正确地址 32(&s3),s3是基址,32是偏移量,就是先从数组里取出数到临时寄存器,然后再在临时寄存器上加上变量,最后再把临时寄存器上的变量存到数组里,偏移量࿰…...
i春秋-签到题
练习平台地址 竞赛中心 题目描述 题目内容 点击GUESS后会有辨识细菌的选择题 全部完成后会有弹窗提示 输入nickname后提示获得flag F12检查 元素中没有发现信息 检查后发现flag在控制台中 flag flag{663a5c95-3050-4c3a-bb6e-bc4f2fb6c32e} 注意事项 flag不一定要在元素中找&a…...
TypeScript 中扩展现有模块的用法
declare module 是 TypeScript 中用于扩展现有模块的特性。它允许开发者在已有模块的基础上,添加新的功能(比如扩展接口、添加类型声明等)。通过 declare module,可以将额外的声明合并到原模块中。以下是用法详解: 用…...
【报错记录】解决Termux中pulseaudio启动报错,报:E: [pulseaudio] main.c: Daemon startup failed.
前言 在尝试使用Termux-X11启动Minecraft过程中,不知道怎么回事原本好好的pulseaudio居然无法启动了,一直在报: E: [pulseaudio] main.c: Daemon startup failed. 重装了好几次也没用解决方案如下。 排除重复启动 如果pulseaudio之前已经…...
Java list
在 Java 中,链表(LinkedList)是一个非常重要的数据结构,它可以动态地插入和删除元素,因此比数组更灵活。Java 提供了 LinkedList 类,该类实现了 List 接口,并且是基于双向链表实现的,…...
MAC借助终端上传jar包到云服务器
前提:保证工程本地已打包完成:图中路径即为项目的target目录下已准备好的jar包 第一步:打开终端(先不要连接自己的服务器),输入下面的上传命令: scp /path/to/local/app.jar username192.168.1…...
对原jar包解压后修改原class文件后重新打包为jar
文章目录 背景三种修改方式1.POM中移除原jar中依赖的历史版本2.原jar它不使用pom依赖而是直接放在源码中再编译使用JarEditor 插件对源码进行修改(推荐)使用java-decompiler反编译后修改源码覆盖原class(不好用-不推荐直接跳过)提醒 参考资料-推荐阅读拓…...
YY币支付系统改源码(改良版本)
Nginx :1.20.1(版本都可以) MySQL:5.6.50(兼容该版本其他不知道) 简单优化服务器(可不安装,看要求) PHP安装扩展名称:fileinfo | opcache | imagemagick …...
【Swift】类型标注、类型安全和类型推断
文章目录 类型标注类型安全和类型推断什么是类型安全和类型推断为什么说Swift是一门安全语言类型安全带来的好处 类型标注 当你声明常量或者变量的时候可以加上类型标注(type annotation),说明常量或者变量中要存储的值的类型。如果要添加类…...
06 —— Webpack优化—压缩过程
css代码提取后想要压缩 —— 使用css-minimizer-webpack-plugin插件 下载 css-minimizer-webpack-plugin 本地软件包 npm install css-minimizer-webpack-plugin --save-dev 配置 webpack.config.js 让webpack拥有该功能 const CssMinimizerPlugin require(css-minimizer-…...
uniapp页面样式和布局和nvue教程详解
uniapp页面样式和布局和nvue教程 尺寸单位 uni-app 支持的通用 css 单位包括 px、rpx px 即屏幕像素。rpx 即响应式px,一种根据屏幕宽度自适应的动态单位。以750宽的屏幕为基准,750rpx恰好为屏幕宽度。屏幕变宽,rpx 实际显示效果会等比放大…...
单条推理转批量推理prompt
为了将单条推理程序改为批量推理程序,并实现您的要求,我们需要进行以下步骤: 输入的图片和视频都是随机从视频文件夹、图片文件夹挑选,组成输入对: 需要编写一个函数来读取指定文件夹中的所有图片和视频文件。 使用随…...
Windows 内网 Web 服务穿透方案推荐
Windows 内网 Web 服务穿透方案推荐 面向场景:内网机器为 Windows,需从公网或外网访问内网 HTTP/HTTPS Web 服务;优先选择相对不易被误报、来源清晰、可审计的方案。 关于「报毒」的说明 穿透类软件常被启发式引擎标为「风险/可疑」…...
Simulink整车控制器vcu应用层模型,实车在用的,支持仿真和生成 文件分类明确
Simulink整车控制器vcu应用层模型,实车在用的,支持仿真和生成 文件分类明确,每个普通功能和核心功能建有单独的库,存放在文件夹里。 有相应的表格,描述了信号的意思。搞汽车电子的兄弟都知道,整车控制器&am…...
3分钟搞定!LyricsX让你的macOS音乐播放器拥有完美歌词体验
3分钟搞定!LyricsX让你的macOS音乐播放器拥有完美歌词体验 【免费下载链接】LyricsX 🎶 Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsX 还在为macOS上的音乐播放器找不到合适的歌词而烦恼吗?L…...
蒙纳什大学发现多模态推理模型的“不确定性陷阱“
这项由蒙纳什大学、佐治亚理工学院、康奈尔大学等多所知名学府联合完成的研究发表于2026年3月的《计算机视觉与模式识别》会议,论文编号为arXiv:2603.13366v1。有兴趣深入了解的读者可以通过该编号查询完整论文。当你问一个AI"这张图片里有什么"时&#x…...
OpenClaw配置优化:GLM-4.7-Flash模型响应速度提升
OpenClaw配置优化:GLM-4.7-Flash模型响应速度提升 1. 为什么需要优化GLM-4.7-Flash的响应速度 第一次用OpenClaw对接GLM-4.7-Flash模型时,我遇到了典型的"等待焦虑"——一个简单的文件整理任务竟然花了3分钟才返回结果。通过日志分析发现&am…...
无损视频剪辑神器LosslessCut:3分钟学会零编码损耗的专业剪辑技巧
无损视频剪辑神器LosslessCut:3分钟学会零编码损耗的专业剪辑技巧 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 你是否还在为视频剪辑时画质损失而烦恼&…...
WorkBuddy杀疯了?一群AI专家帮我打工,我在微信里当赛博虾工头!
梦瑶 发自 凹非寺量子位 | 公众号 QbitAI到底是谁说,给老板打工自己就当不成老板的?又是谁说,龙虾不好用、还不听使唤的?反正这些事儿,现在跟我没啥关系了。毕竟现在的我,已经转头当起了「虾工头」…...
Win11Debloat:Windows系统轻量优化解决方案
Win11Debloat:Windows系统轻量优化解决方案 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以简化和改善你的Win…...
asp毕业设计下载(全套源码+配套论文)——基于asp+access的公司门户网站设计与实现
基于aspaccess的公司门户网站设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于aspaccess的公司门户网站设计与实现,更多精选毕业设计项目实例见文末哦。 文章目录: 基于aspaccess的公司门户网站设计与实现&a…...
OpenClaw镜像体验报告:GLM-4.7-Flash云端部署3大优势
OpenClaw镜像体验报告:GLM-4.7-Flash云端部署3大优势 1. 为什么选择云端体验OpenClaw 上周我在本地笔记本上折腾OpenClaw时,经历了所有开发者都熟悉的"依赖地狱"——Node.js版本冲突、Python环境污染、系统权限问题接踵而至。当终于看到open…...
