C++将函数声明放在头文件中的示例

C++将函数声明放在头文件中的示例

C++函数原型声明(函数声明)的位置可以有以下几种选择:

1.函数声明放在同一源文件中:这种情况通常适用较小的项目中,通常可以将函数的声明和定义放在同一个源文件中。先声明函数原型,然后定义函数的实现。

2.函数声明放在头文件中,函数定义放在实现文件中。在大型项目中,常常将函数的声明放在一个或多个头文件中,然后将函数的定义放在对应的源文件中。头文件包含函数的原型,以及可能需要的其他声明(例如结构体、宏等),实现源文件则包含函数的具体实现。在另外的源文件(应用源文件)中使用之。

下面给出示例。

★函数声明放在源文件中,这个常见,例如:

#include <iostream>
using namespace std;

// 函数声明
int add(int a, int b); 

int main() {
    int x = 5;
    int y = 10;
    int sum = add(x, y); //函数调用 ,x 和 y 是实参,它们的值被传递给 add 函数的形参 a 和 b
    cout << "和: " << sum << endl;
    
    return 0;
}

// 函数定义
int add(int a, int b) {
    return a + b;
}

运行效果:

★函数声明放在头文件中,函数定义放在实现源文件中,在另外的源文件(应用源文件)中使用之。例如:

MathUtils.h文件(头文件)内容如下:

#ifndef MATHUTILS_H
#define MATHUTILS_H

// 函数声明
int add(int a, int b);
int subtract(int a, int b);
double multiply(double a, double b);
double divide(double a, double b);

#endif

 说明,其中

#ifndef MATHUTILS_H

#define MATHUTILS_H

#endif

这是头文件保护宏(header guard)的常见用法。它们的作用是防止头文件的重复包含。

#ifndef MATHUTILS_H这个预处理指令检查是否已定义了名为 MATHUTILS_H 的宏。如果没有定义,表示这是第一次包含该头文件,那么就会执行 #define MATHUTILS_H。

#define MATHUTILS_H:这个预处理指令定义了名为 MATHUTILS_H 的宏。定义这个宏是为了防止多次包含同一个头文件时出现重定义的错误。

#endif:这个预处理指令结束条件编译块。它与 #ifndef 配套使用,将 #ifndef 和 #define 之间的代码包裹起来,确保只有当宏未定义时才会包含这些代码。

头文件保护机制是一个非常常见的做法,它能够确保头文件只被包含一次,避免了由于重复定义而引起的错误。

#ifndef和#define的标识符设置为对应头文件的名称。这样做的好处是可以确保每个头文件都有一个唯一的标识符,避免头文件重复包含的问题。标识符的命名通常会在头文件名称上加上一个下划线,以避免与其他标识符冲突。

例如,对于名为mathutils.h的头文件,我们可以这样设置#ifndef和#define的标识符:

#ifndef MATHUTILS_H

#define MATHUTILS_H

MathUtilsFunctions.cpp文件(头文件的实现源文件)内容如下:

#include "MathUtils.h"

// 函数实现
int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

double multiply(double a, double b) {
    return a * b;
}

double divide(double a, double b) {
    return a / b;
}

mainAPP.cpp文件(应用调用)内容如下:

#include "MathUtils.h" // 头文件 
#include "MathUtilsFunctions.cpp" // 包含函数定义的源文件
#include <iostream>
using namespace std; 

int main() {
    int num1 = 10;
    int num2 = 5;

    int sum = add(num1, num2);
    int difference = subtract(num1, num2);
    double product = multiply(num1, num2);
    double quotient = divide(num1, num2);
   
    cout << "Sum: " << sum << endl;
    cout << "Difference: " << difference << endl;
    cout << "Product: " << product << endl;
    cout << "Quotient: " << quotient << endl;

    return 0;
}

这种方式可以有效地组织代码,提高代码的可维护性和可读性。同时,如果将来需要在其他源文件中使用这些函数,只需包含MathUtils.h头文件即可。

编译运行

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

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

相关文章

2. Linux安装Git

yum安装 查看版本 版本太低&#xff0c;所以我们采用自己上传编译的方式进行 删除已安装的git yum remove git 下载最新安装包&#xff0c;并上传到服务器文件夹下 上传&#xff0c;解压 5.安装编译需要的依赖 yum install curl-devel expat-devel gettext-devel openssl-…

【Leetcode】层次遍历||树深度||队列

step by step. 题目&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&am…

动力节点2023版王鹤SpringBoot3学习教程

Spring Boot 3.0新版本的推出&#xff0c;带来个更多的新特性和功能&#xff0c;也为开发人员提供更高效、更优秀的开发体验和应用性能&#xff0c;值得我们深入学习。 动力节点最新升级版SpringBoot3教程&#xff0c;王鹤老师再度出击&#xff0c;视频长达28小时&#xff0c;够…

windows配置git公钥,读写远程git项目

首先Windows电脑需要下载并安装git&#xff1a; 从官网直接下载然后安装即可&#xff1a;https://git-scm.com/download/win 添加公钥 ssh-keygen -t rsa -C "xxxxxxx.com"注意&#xff1a;这个xxxxxxx.com与github注册的邮箱一致 然后一路回车&#xff0c;生成完…

如何使用Mac终端给树莓派pico构建C/C++程序进行开发,以及遇到各种问题该怎么处理,不使用任何IDE或编辑器(例如VS Code)

写本文的原因是官方的教程已经过时了&#xff0c;如果你现在按照官方教程来在 Mac 上进行配置&#xff0c;那么会遇到一堆问题&#xff0c;比如我几乎把能踩的“雷”都踩了。所以这里记录了完整过程&#xff0c;以及各种错误的原因和处理方法&#xff0c;不然以后换 Mac 了或者…

网络:CISCO、Huawei、H3C命令对照

思科、华为、锐捷命令对照表 编号思科华为锐捷命令解释1 2writesavesave保存3456 如果你所处的视图为非系统视图&#xff0c;需要查看配置的时候&#xff0c;需要在该配置命令前加do。 在特定的视图之下&#xff0c;有对应的特定命令。例如&#xff0c;在接口视图下的ip addre…

Nginx安装以及LVS-DR集群搭建

Nginx安装 1.环境准备 yum insatall -y make gcc gcc-c pcre-devel #pcre-devel -- pcre库 #安装openssl-devel yum install -y openssl-devel 2.tar安装包 3.解压软件包并创建软连接 tar -xf nginx-1.22.0.tar.gz -C /usr/local/ ln -s /usr/local/nginx-1.22.0/ /usr/local…

剑指 Offer 15. 二进制中1的个数

题目描述 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 ‘1’ 的个数&#xff08;也被称为 汉明重量).&#xff09;。 提示&#xff1a; 请注意&#xff0c;在某些语言&#xff08;如…

从0开始搭建一个Monorepo模版,基于Turborepo+pnpm+changesets+dumi

Monorepo 前言开始一、使用turborepo初始化项目二、调整目录结构及文件1. 调整package.json文件2. 调整app目录3. 调整eslint包4. 调整ui包5. 调整eslint配置6. 调整.npmrc7. 使用commitizen规范代码提交8. 使用commitlinthusky进行 commit提交信息校验9. 使用husky进行commit前…

Pod进阶

目录 一、资源限制 1. CPU 资源单位 2.内存 资源单位 3.示例 二、重启策略 三、健康检查&#xff08;探针) 1.探针的三种规则&#xff1a; 1.1就绪探测 2.Probe支持三种检查方法&#xff1a; 2.1exec检查方式 2.2httpGet方式 2.3tcpSocket方式 3. 启动、退出动作…

pyscenic分析:视频教程

我们之前更新过pyscenic的教程&#xff1a;pySCENIC单细胞转录因子分析更新&#xff1a;数据库、软件更新。我们也说过&#xff0c;我们号是放弃R语言版的SCENIC的分析了&#xff0c;因为它比较耗费计算资源和时间&#xff0c;所以我们的单细胞转录因子分析教程都是基于pysceni…

什么是Linux,如何在Windows操作系统下搭建Linux环境,远程连接Linux系统

文章目录 什么是LinuxLinux的诞生及发展为什么要学习LinuxLinux内核Linux发行版什么是虚拟机如何在VMware虚拟机中搭建Linux系统环境远程连接 Linux 系统Linux 帮助网站 什么是Linux Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户…

如何改造antd-vue的table支持虚拟列表功能

对于超大数据量的接口来说&#xff0c;如果前端直接一股脑的渲染出来&#xff0c;必然会导致渲染超时、操作卡顿、内存爆表、网页奔溃等情况&#xff0c;因此一般的对于大数据量的列表处理&#xff0c;无非就以下几种方式 采取分页的方式&#xff0c;减少每页的数量 比如每页1…

棱镜七彩正式加入龙蜥社区安全联盟(OASA)

近日&#xff0c;龙蜥社区安全联盟&#xff08;OASA&#xff09;正式成立&#xff0c;棱镜七彩成为该联盟成员单位。 龙蜥社区安全联盟是促进产业合作的非营利组织&#xff0c;致力于打造中立开放、聚焦操作系统信息安全的交流平台&#xff0c;推进龙蜥社区乃至整个产业安全生态…

【git】git常用命令总结

目录 一、流程 二、基本流程命令&#xff08;从初始化到推送到远程仓库&#xff09; 三、分支相关命令 四、提交代码 五、拉取主分支最新代码 六、合并远程仓库主分支代码到分支 七、撤销回退 一、流程 workspace 工作区&#xff0c;就是你的编辑器打开的文件 staging are…

【uniapp】uniapp打包H5(网页端):

文章目录 一、设置appid&#xff1a;二、设置router&#xff1a;三、打包&#xff1a;【1】[CLI 发行uni-app到H5&#xff1a;https://hx.dcloud.net.cn/cli/publish-h5](https://hx.dcloud.net.cn/cli/publish-h5)【2】HBuilderX 四、最终效果&#xff1a; 一、设置appid&…

Jupyter Notebook 未授权访问远程命令执行漏洞

漏洞描述 Jupyter是一个开源的交互式计算环境&#xff0c;它支持多种编程语言&#xff0c;包括Python、R、Julia等。Jupyter的名称来源于三种编程语言的缩写&#xff1a;Ju(lia)、Py(thon)和R。 Jupyter的主要特点是它以笔记本&#xff08;Notebook&#xff09;的形式组织代码…

lancet: 【推荐】--源码学习

一个全面、高效、可复用的go语言工具函数库&#xff1b; 可以学习源码的好的地方&#xff0c;这个是个工具库&#xff0c;建议最好的办法是 在项目中导入后&#xff0c;然后查看他的各个源代码进行学习使用 golangd中&#xff0c;查看导入包以及他的源代码&#xff1b; 中文…

【腾讯云 Cloud Studio 实战训练营】用于编写、运行和调试代码的云 IDE泰裤辣

文章目录 一、引言✉️二、什么是腾讯云 Cloud Studio&#x1f50d;三、Cloud Studio优点和功能&#x1f308;四、Cloud Studio初体验&#xff08;注册篇&#xff09;&#x1f386;五、Cloud Studio实战演练&#xff08;实战篇&#xff09;&#x1f52c;1. 初始化工作空间2. 安…