C++共享和保护——(5)编译预处理命令

news2024/9/24 3:24:11

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
耕耘者的汗水是哺育种子成长的乳汁!

一起加油!


目录

一、前言:

二、C++常见的预处理命令: 

1.宏定义命令

💦例:简单宏定义应用:已知半径,编程求圆的周长、面积和球的体积。

🔑说明:

💦例:带参数的宏定义。

 2.文件包含命令

 3.条件编译命令

💦例:条件编译命令示例。

三、使用条件编译指令防止头文件被重复引用:

四、共勉:


一、前言:

        C++从C语言那里继承了编译预处理。编译预处理的作用是对程序文本进行扫描,对其进行初步转换,产生新的源代码并提交给编译器。所有预处理指令在程序中都是以“#”来引导的,一条预处理指令单独占用一行,结束的位置没有分号。预处理指令可以根据需要出现在程序中的任何位置。

二、C++常见的预处理命令: 

1.宏定义命令

        这种命令一般用在 C 语言中,在 C++中很少使用,宏定义命令分为简单宏定义命令和带参数宏定义命令。
        简单宏定义命令用来将一个标识符定义为一个字符串。在预处理时,将程序中出现的宏名用被定义的字符串替换,称为宏替换,替换后再进行编译。 

💦例:简单宏定义应用:已知半径,编程求圆的周长、面积和球的体积。

#include<iostream>
using namespace std;
const double PI=3.14159//定义的常量为double型 
int main(){
	double r,l,s,v;
	cout<<"Input radius:";
	cin>>r;
	l=2*PI*r;
	s=PI*r*r;
	v=4.0/3.0*PI*r*r*r;
	cout<<"周长 l="<<l<<endl<<"面积 s="<<s<<endl<<"体积 v="<<v<<endl;
	return 0; 
} 

🔑说明:

        程序中所有的 PI 都被宏定义的字符串替换掉。这种简单的替换一般在C语言中使用,用来定义符号常量。而在 C++中使用常类型 const 来定义常量,const 可以定义不同类型的常量。 

        带参数的宏定义命令是指在宏名后面跟着参数表,在替换时,仅替换宏定义中与参数表相同的标识符。带参数的宏定义中出现的参数被称为形参,在程序中用宏定义时出现的参数则被称为实参。         

💦例:带参数的宏定义。

#include<iostream>
using namespace std;
#define MUL(x,y) (x)*(y)
int main(){
	int x,y;
	cin>>x>>y;
	cout<<MUL(x,y)<<endl;
	return 0;
} 

 2.文件包含命令

        文件包含命令用来将另一个源文件嵌入到当前文件中的某个位置,以备将来需要时使用。C++

中常用的有#include <iostream>(提供有关输入/输出的功能)和#include <cmath> (提供许多数学计算的函数),文件包含命令一般放在程序的开头,有如下两种格式。
(1)#include <文件名>
        按标准方式搜索,文件位于系统目录的 include 子目录下
(2)#include "文件名"
        首先在当前目录中搜索,若没有,再按标准方式搜索#include 指令可以嵌套使用。假设有一个头文件 myhead.h,该头文件中可以有如下的文件包含命令:

#include"file1.h"
#include"file2.h"

 3.条件编译命令

        使用条件编译指令,可以限定程序中的某些内容只有在满足一定条件的情况下才参与编译
(1)格式1

#ifdef<标识符>
<程序段 1>
#else
<程序段 2>
#endif

当标识符被宏定义时,程序段 1参与编译,否则,程序段 2 参与编译

(2)格式2

#ifndef<标识符>
<程序段 1>
#else
<程序段 2>
#endif

当标识符未被宏定义时,程序段 1参与编译;否则,程序段 2参与编译 

(3)格式3
#if<常量表达式>
<程序段 1>
#else
<程序段 2>
#endif

当常量表达式的值非 0时,程序段 1 参与编译;否则,程序段2参与编译

💦例:条件编译命令示例。

#ifndef T
	#define T 1
#endif
#if T==1
	char s[]="good morning!";
#endif
#include<iostream>
using namespace std;
int main(){
	cout<<"hello!"<<s<<endl;
	return 0;
} 

三、使用条件编译指令防止头文件被重复引用:

        由于文件包含指令可以嵌套使用,所以在设计程序时要避免多次重复包含同一个头文件,否则会引起变量及类的重复定义。例如,某个工程包含如下四个源文件。

//main.cpp
#include"file1.h"
#include"file2.h"

int main(){
	…… 
}

//file1.h
#include"head.h"


……

 
//file.h
#include"head.h"


……

//head.h


……
class Point{
	…… 
};

……

        此时,由于#include 指令的嵌套使用,头文件 head.h 被包含了两次,于是编译时系统会指出错误:类 Point 被重复定义。那么,如何避免这种情况呢?这就要在可能被重复包含的头文件中使用条件编译指令。用一个唯一的标识符来标记某文件是否已参加过编译,如果已参加过编译,则说明该程序段是被重复包含的,编译时忽略重复部分。将文件 head.h 改写为:

//head.h
#ifdef_HEAD_H
#define HEAD_H 
……
class Point{
	…… 
}; 

……

#endif 

四、共勉:

        以上就是我对C++共享和保护——(5)编译预处理命令的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++共享和保护的理解,请持续关注我哦!!! 

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

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

相关文章

无约束优化问题求解笔记(1)

目录 1. 迭代求解的基本流程与停止准则1.1 迭代求解的基本流程1.2 停止准则1.3 收敛阶 2. 线搜索方法2.1 精确线搜索2.2 非精确搜索**Goldstein 准则****Wolfe 准则** 2.3 线搜索算法的收敛性 1. 迭代求解的基本流程与停止准则 1.1 迭代求解的基本流程 优化问题的解通常无法直…

智慧食堂餐卡充值文件生成器使用说明

智慧食堂餐卡充值文件生成器 下载地址&#xff1a; https://download.csdn.net/download/boysoft2002/88646277 或者百度网盘下载&#xff1a; https://pan.baidu.com/s/16cxOa5aq0CU0T0xOr2A7-A 操作使用说明 一、文件结构 下载.rar文件后&#xff0c;释放到非系统盘符的…

Labview Vision 机器视觉使用,从下载程序安装应用,到实战找硬币并输出值

1.前言 大家好,今天我要和机器人一起配合来打算 做机器视觉 用Labview 和 Vision 联动实现机器的视觉 2.下载软件-软件的安装 我们除了基础款的labview软件 还要安装视觉四件套 1.Labview 编程平台&#xff08;我是 2023 q3&#xff09; 2. NI - IMAQdx &#xff08;驱动软…

【python】程序运行添加命令行参数argparse模块用法详解

Python标准库之argparse&#xff0c;详解如何创建一个ArgumentParser对象及使用 一. argparse介绍二. 使用步骤及参数介绍三. 具体使用3.1 设置必需参数3.2 传一个参数3.3 传多个参数3.4 位置参数和可选参数3.5 参数设置默认值3.6 其它用法 一. argparse介绍 很多时候&#xff…

Python数据处理必备:Pandas DataFrame中行迭代技巧大曝光!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在数据分析和处理中&#xff0c;Pandas是Python中最常用的库之一&#xff0c;而DataFrame是Pandas的核心数据结构之一。迭代DataFrame中的行是一种常见的操作&#xff0c;本文将详细介绍几种迭代DataFrame行的方…

AI毕业设计生成器(可生成java或python系统源码),使用Tensorflow训练的AI代码大模型

这是一个辅助生成计算机毕业设计的工具&#xff0c;可以自动完成毕业设计的源码。它基于几百个github上面开源的java和python项目&#xff0c;运用tengsorflow技术&#xff0c;训练出了AI大模型。基本实现了计算机毕业设计生成器&#xff0c;能够初步生成Java或python基本源码。…

暴雪来袭!AI智能视频监控如何保障雪天出行

随着冬季的寒潮来袭&#xff0c;多地也发出了暴雪预警&#xff0c;低温严寒加上暴雪突袭&#xff0c;AI智能视频监控如何保障雪天正常出行呢&#xff1f;小编罗列了如下几条&#xff1a; 1、道路监控系统 安防管理平台EasyCVR道路智能监控方案是通过摄像头和传感器监测道路状况…

翻译: LLMs关于人工智能的担忧 Concerns about AI

在短时间内&#xff0c;获取生成人工智能的能力已经在全球范围内传播&#xff0c;使许多人能够生成高质量的文章、图片和音频。随着这些惊人的能力的出现&#xff0c;也带来了许多关于人工智能的担忧。我认为即使在生成人工智能兴起之前&#xff0c;我们就已经生活在许多焦虑之…

AI芯片、GPU、算力、大模型

人工智能&#xff08;Artificial Intelligence&#xff09; AIGC&#xff08;Artificial Intelligence Generated Content / AI-Generated Content&#xff09; 中文译为人工智能生成内容&#xff0c;一般认为是相对于PCG&#xff08;专业生成内容&#xff09;、UCG&#xff0…

我在代码随想录|写代码Day6之 454.四数相加II ,三数之和

第一题: 454.四数相加II 题目 解答思路 我们要四数相加等于0一般的思路是暴力破解直接4个for循环,然后通过4个for循环得到答案, 但是这样的时间复杂度是O(n4),会超时然后我们通过将循环拆分,比如将 代码 第二题 : 题目: 代码 class Solution { public:vector<vector<…

【教3妹学编程-算法题】循环移位后的矩阵相似检查

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&…

Playground AI刚刚推出了它的新宠儿——Playground V2,去试试?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

PyQt6 QFontDialog字体对话框控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计50条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

基于Antd4 和React-hooks的项目开发

基于Antd4 和React-hooks的项目开发 https://github.com/dL-hx/react-cnode 项目依赖使用 react 16.13react-redux 7.xreact-router-dom 5.xredux 4.xantd 4axiosmoment 2.24 (日期格式化)qs 项目视图说明 首页主题详情用户列表用户详情关于 配置按需加载 https://3x.an…

算法训练营Day19

#Java #二叉树 #双指针 开源学习资料 Feeling and experiences&#xff1a; 二叉搜索树的最小绝对差&#xff1a;力扣题目链接 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的…

使用Matlab实现声音信号处理

利用Matlab软件对声音信号进行读取、放音、存储 先去下载一个声音文件&#xff1b;使用这个代码即可 clear; clc; [y, Fs] audioread(xxx.wav); plot(y); y y(:, 1); spectrogram(y); sound(y, Fs); % player audioplayer(y, Fs);y1 diff(y(:, 1)); subplot(2, 1, 1); pl…

107基于matlab的模糊推理系统(ANFIS)的时间序列预测

基于matlab的模糊推理系统&#xff08;ANFIS&#xff09;的时间序列预测&#xff0c;输出训练集、测试集和预测数据结果&#xff0c;数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 107 时间序列预测模糊推理系统 (xiaohongshu.com)

uniapp的editor组件在H5上无法点击的问题处理

uniapp开发的移动端H5和小程序&#xff0c;富文本框输入框使用了editor的组件 在小程序端是运行正常的&#xff0c;但是在H5端出现了无法点击的情况&#xff0c;是好时坏 原因是H5端依赖远端的quill.min.js组件&#xff0c;该远端的组件偶尔会出现访问的情况 文档上写的比较清…

[AutoSar]基础部分 RTE 02 S/R Port 显式/隐式

目录 关键词平台说明一、显式&#xff08;Explicit&#xff09;和隐式&#xff08;Implicit&#xff09;1.1 显式模式1.1.1code 二、隐式模式2.1 code 三、区别 关键词 嵌入式、C语言、autosar、EcuM、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语…

若依(ruoyi)管理系统标题和logo修改

1、网页上的logo 2、页面中的logo 进入ruoyi-ui --> src --> assets --> logo --> logo.png&#xff0c;把这个图片换成你自己的logo 3、网页标题 进入ruoyi-ui --> src --> layout --> components --> Sidebar --> Logo.vue&#xff0c;将里面的…