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

news2024/12/28 10:23:20

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头文件即可。

编译运行

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

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

相关文章

教你如何将3D模型导入到可视化大屏系统中,并实现可交互效果

首先我们需要准备一款数字孪生软件&#xff0c;本文中使用的是山海鲸可视化&#xff0c;这是一款免费的零代码数字孪生大屏开发平台软件。 下载完成后打开山海鲸可视化&#xff0c;点击新建来创建一个大屏项目。 我们可以根据自己的需要来创建各种场景的项目或是套用模板项目&a…

React源码解析18(4)------ completeWork的工作流程【mount】

摘要 经过上一章&#xff0c;我们得到的FilberNode已经具有了child和return属性。一颗Filber树的结构已经展现出来了。 那我们最终是想在页面渲染真实的DOM。所以我们现在要在completeWork里&#xff0c;构建出一颗离屏的DOM树。 之前在说FilberNode的属性时&#xff0c;我们…

CAD文件打开错误中断怎么办?CAD文件打开错误中断的解决方法

CAD是一款计算机辅助设计软件&#xff0c;主要用于二维绘图、详细绘制、设计文档和基本三维设计&#xff0c;CAD已经是一款国内国外广为流行的绘图工具了&#xff0c;在土木建筑、装饰装潢、城市规划、园林设计、电子电路、机械设计、服装鞋帽、航空航天、轻工化工等行业应用非…

【UE4 RTS】08-Setting up Game Clock

前言 本篇实现的效果是在游戏运行后能够记录当前的游戏时间&#xff08;年月日时分秒&#xff09;&#xff0c;并且可以通过修改变量从而改变游戏时间进行的快慢。 效果 步骤 1. 在Blueprints文件夹中新建如下两个文件夹&#xff0c;分别命名为“GameSettings”、“Player”…

【docker】设置 docker 国内镜像报错,解决方案

一、报错&#xff1a; [rootlocalhost ~]# systemctl restart docker Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.二、原因&#xf…

Excel---成绩相同者,名次并列排列,三步搞定

需求&#xff1a;一张成绩表&#xff0c;共341行(340条数据&#xff0c;第一条为标题)&#xff0c;根据成绩进行排序&#xff0c;成绩相同进行名次并列 一、选择生成结果的位置&#xff0c;我这里点击了一下E2单元格 二、公式—>插入–>rank函数 数值&#xff1a;D2 表示…

IDEA新建类时自动设置类注释信息,署名和日期

IDEA设置路径 File --> Settings --> Editor --> File and Code Templates --> Include --> File Header 官方模板 这里 ${USER} 会读取计算机的用户名 ${DATE}是日期 ${TIME}是时间 /*** Author ${USER}* Date ${DATE} ${TIME}* Version 1.0*/

成都优优聚拥有丰富美团代运营经验!

成都优优聚美团代运营是一家专业的电商运营服务机构&#xff0c;致力于帮助商家提升线上业绩&#xff0c;增加销售额。他们以优良的售后服务和卓越的业绩&#xff0c;赢得了众多商家的认可和信赖。 与成都优优聚美团代运营合作的好处是多方面的。首先&#xff0c;他们拥有一支经…

java spring cloud 企业工程管理系统源码+二次开发+定制化服务 em

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显…

兰州https证书申请

https证书是由CA认证机构颁发的数字证书&#xff0c;可以为域名网站或者公网IP网站提供信息加密服务&#xff0c;正规CA认证机构签发的https证书可以兼容99%的主流浏览器和IOS、Windows系统&#xff0c;同样&#xff0c;现在流行的小程序也需要https证书。那么&#xff0c;该怎…

又一重磅数据将要来袭,今晚聚焦CPI

KlipC报道&#xff1a;北京时间周四20&#xff1a;30公布的美国7月消费者价格指数(CPI)报告。 KlipC的合伙人Andi D表示&#xff1a;“市场正在密切关注美国CPI数据&#xff0c;最新的消费者物价指数读数可能会改变人们对美联储今年是否再次加息的预期。 摩根大通的分析师表示&…

Java基础---自动装箱拆箱导致的NullPointerException问题

目录 问题描述 代码 简单分析 问题描述 在返回一个类型是boolean的方法中&#xff0c;将从map里面取出的Boolean类型的值直接返回&#xff0c;代码一运行&#xff0c;执行到这立即出现了空指针问题&#xff08;问题一&#xff09;于是就使用log分析&#xff0c;将字符和Bool…

Java之深入探究IO流操作与Lambda表达式

深入探究Java IO流操作与Lambda表达式的优雅结合 1. IO流1.1 IO流的概念1.2 IO流的分类1.3 常见的IO流操作1.3.1 字节流操作1.3.2 字符流操作1.3.3 缓冲流 2. Lambda表达式2.1 Lambda 表达式使用条件2.2 Lambda 表达式的分类2.3 Lambda 表达式在 IO 流操作中的应用2.4 常见的 I…

虹科新品 | 振动监测:提升风能行业效率与安全!

一、 CTC概览 服务于工业振动分析市场ISO 9001认证设计和测试以满足工业环境的实际需求无条件终身保修兼容所有主要数据采集器、分析仪和在线系统美国制造 二、风能行业&#xff1a;为什么要进行监测&#xff1f; 在风能行业&#xff0c;振动监测是一项至关重要的节约成本和安…

详解低代码和无代码的区别

低代码是近几年被炒的很热的一个概念&#xff0c;与之同样热议的还有无代码。那么针对这两个概念&#xff0c;背后的价值、面向的人群、发展的趋势是什么&#xff1f; 一、低代码 vs 无代码 低代码是什么&#xff1f; 低代码&#xff08;Low-Code&#xff09;这一概念是2014年一…

js 额外知识

加油&#xff0c;嘎嘎嘎 &#x1f923; &#x1f495;&#x1f495;&#x1f495; 文章目录 一、 with二、 eval 函数三、严格模式三、严格模式的限制 一、 with with语句 扩展一个语句的作用域链。 会形成一个自己的作用域不建议使用with语句&#xff0c;因为它可能是混淆错误…

Centos7.9_解决每次重启机器配置的java环境变量都需要重新source /etc/profile才生效的问题---Linux工作笔记060

这种情况需要把环境变量,java的环境变量在/root/.bashrc文件中也放一份,注意这个文件是隐藏的,默认是,需要进行ls -a才能显示. #jdk export JAVA_HOME/lib/jvm export JRE_HOME${JAVA_HOME}/jre export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH${JAVA_HOME}/b…

STM32F105RCT6 -- ST-Link ITM Trace printf 打印日志

1. STM32 可以配置UASRT&#xff0c;使用串口来打印日志&#xff0c;还有另外一种方式&#xff0c;使用ITM 调试功能来打印日志&#xff0c; 主要使用到的三个函数 core_cm3.h 1.1 发送函数 static __INLINE uint32_t ITM_SendChar(uint32_t ch)&#xff0c;相当于串口的发送函…

锚框【目标检测】

生成多个锚框 假设输入图像高为h,宽为w,我们以图像每个像素为中心生成不同形状的锚框,缩放比 s∈(0,1],宽高比为r>0。那么锚框的宽度和高度分别为和。当中心位置给定时, 已知宽和高的锚框是确定的。缩放比为锚框高与图像高的比值,然后得到一个正方形锚框面积。 ​​…

pytest接口自动化测试框架搭建的全过程

目录 一. 背景 二. 基础环境 三. 项目结构 四、框架解析 pytest是Python的一种单元测试框架,可用来组织用例执行,用例断言,下面这篇文章主要给大家介绍了关于pytest接口自动化测试框架搭建的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下 一. 背景 Pyte…