c语言 前置声明,C语言编程开发前置声明都有哪些作用

2023-11-09

声明是我们在学习C语言编程开发的时候经常见到的一个设置条件,而今天我们就通过案例分析来了解一下,C语言编程开发前置声明都有哪些作用。

e940cb6e7190159a1349af4059fee9fc.png

前置声明是C/C++开发中比较常用的技巧,主要用在三种情形:

变量/常量,例如extern int var1;;

函数,例如void foo();,注意类的成员函数无法单独做前置声明;

类,例如class Foo;,也可以前置声明模板类:template classFoo;。如果类包含在名字空间中,需在名字空间内做前置声明:namespace tlanyan {class Foo;};,而不能这样:class

tlanyan::Foo;。

前置声明作用

根据其用途,前置声明的主要作用为:

避免重复定义变量;

避免引入函数定义/声明文件,从而函数文件发生更改时不会重新编译依赖文件;

解决循环依赖问题。

前两种用途好理解,三种稍微复杂点,但却是前置声明重要的用途。其解决类A包含类B,同时类B包含类A的依赖问题。循环依赖一般是设计层面的问题,可通过接口、引入辅助类等手段化解。前置声明也能解决,只是架构上稍微别扭。

如果你有其他编程语言的经验,会发现c++有点怪异:Java/C#/Pytho

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言 前置声明,C语言编程开发前置声明都有哪些作用 的相关文章

  • WeOpen Good 开源公益计划正式启动!聚开源智慧·行科技向善

    PART 1 缘起和初心 8 15 20 当看到这些数字 你第一时间会想到什么 少 不足一提 亦或是什么呢 1 我们生活的地球上 有超过 70 亿人口 其中 10 亿以上的人 也就是相当于总人口约 15 的人有某种形式的残疾 2 世界范围内
  • linux的自旋锁struct spinlock_t的使用

    在linux中提供了一些机制用来避免竞争条件 最简单的一个种就是自旋锁 例如 当一个临界区的数据在多个函数之间被调用时 为了保护数据不被破坏 可以采用spinlock来保护临界区的数据 当然还有一个就是信号量也是可以实现临界区数据的保护的
  • 直接把软件界面做成游戏界面。CEGUI 专用游戏界面开发库。

    下载 http www cegui org uk wiki index php Downloads 更多中文教程 http www ispinel com 2010 05 26 971 首先感谢李素颙同学的热心和耐心指导 做游戏或者计算机图
  • 对应用数据开发还有疑惑?看这篇就够了!数据存储、管理,通通掌握!

    原文 对应用数据开发还有疑惑 看这篇就够了 数据存储 管理 通通掌握 点击链接查看更多技术内容 数据管理可以做什么 应用数据的持久化怎么实现 如何实现数据库加密 在开发应用进行应用数据的处理时 您是否也会有这些疑问呢 现在 我们推出了更为清
  • Access Token(访问令牌)学习

    Access Token 访问令牌 是一种用于身份验证和授权的令牌 在软件开发中 访问令牌通常用于访问受限资源或执行特定操作 Access Token 通常由身份验证服务器颁发 以授权客户端应用程序代表用户访问受保护的资源 当用户进行身份验
  • opencv笔记之--图片模糊操作和锐化操作

    一 模糊操作 usr bin env python coding utf 8 import cv2 as cv import numpy as np def blur demo image dst cv blur image 15 1 cv
  • go换源

    Windows 版本 SETX GO111MODULE on go env w GOPROXY https goproxy cn direct SETX GOPROXY https goproxy cn direct Linux 版本 ec
  • 部署Zabbix企业级分布式监控

    1 定义 1 1 监控定义 通过一个友好的界面进行浏览整个网站所有的服务器状态 可以在Web前端方便的查看监控数据 可以回溯寻找事故发生时系统的问题和报警情况 分类 传统 zabbix nagois 云原生 prometheus 1 2 z
  • 基于tcpdump实例讲解TCP/IP协议

    前言 虽然网络编程的socket大家很多都会操作 但是很多还是不熟悉socket编程中 底层TCP IP协议的交互过程 本文会一个简单的客户端程序和服务端程序的交互过程 使用tcpdump抓包 实例讲解客户端和服务端的TCP IP交互细节
  • 【深度】谭铁牛院士谈人工智能发展新动态

    来源 Frontiers 11月25日 模式识别与人工智能学科前沿研讨会在自动化所召开 会上 谭铁牛院士做 人工智能新动态 报告 回顾了近代以来历次科技革命及其广泛影响 并根据科学技术发展的客观规律解释了当前人工智能备受关注的深层原因 报告
  • Git工作流程:如何在团队中协作?

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 文章目录 前言 G
  • 《Happy Birthday》游戏开发记录(送给朋友的小礼物)

    游戏开发的学习记录 项目 Happy Birthday 一个小小小游戏 基于unity给朋友做的一个生日小礼物 之前都是礼物加信 今年想用自己的技能 把信的内容以另一种方式送给她 但在做这个的时候 也学到一些新的东西 所以把这个也记录下来了
  • ieee-explore/springer文献免费下载办法

    http ieeexplore ieee org document xxxxxxx 改为 http ieeexplore ieee org sci hub tw document xxxxxxx 即可免费下载 是哈萨克斯坦女黑客搞的 见下文
  • 一文带你看懂 MySQL 存储引擎

    本文目录 1 MySQL体系结构 2 存储引擎介绍 3 MySQL 存储引擎特性 4 MySQL 有哪些存储引擎 5 了解 MySQL 数据存储方式 6 MySQL存储引擎介绍 6 1 CSV存储引擎 6 1 1 CSV介绍 6 1 2 使
  • c++中的list容器讲解

    文章目录 1 list的介绍及使用 1 1 list的介绍 1 2 list的使用 1 2 1 list的构造 1 2 2 list iterator的使用 1 2 3 list capacity 1 2 4 list element ac
  • vscode python3安装 xlwt_python EXCEL自动化办公(一)xlrd、xlwt、xlsxwriter安装过程

    目前在python中实现EXCEL办公自动化过程中 经常用到两个包 xlrd和xlwt 在某些博主或者资料中指出xlwt有bug 目前不清楚是否被修复 我们这里保险起见 再安装另一个包xlsxwriter 其中xlrd作为excel读取 x
  • IDEA访问不了官网?看过来!(超详!超细!)

    IDEA访问不了官网 显示 无法访问此网址 超详细 导语 IDEA访问不了 话不多说 实战为主 作者 变优秀的小白 Github YX XiaoBai 爱好 Americano More Ice QQ交流群 new 811792998 注
  • 算法学习 day23

    669 修剪二叉搜索树 给你二叉搜索树的根节点 root 同时给定最小边界low 和最大边界 high 通过修剪二叉搜索树 使得所有节点的值在 low high 中 修剪树 不应该 改变保留在树中的元素的相对结构 即 如果没有被移除 原有的
  • 什么是包?导包的机制

    目录 小白眼中的包 Java包的定义 小白眼中的包 书包 钱包 水桶包都是包 根据盛放东西的区别而划分了不同的种类 盛书的叫书包 盛钱的叫钱包 盛日常出行必备品的桶装包叫水桶包 由此推导 包是盛纳物品的容器 Java包的定义 Java包指的

随机推荐

  • idea中配置连接多个数据库

    要在一个项目中连接如下两个数据库 yml中配置两个不同数据库 master datasource username root password url jdbc mysql localhost 3306 study useUnicode t
  • 基于OpenCV的视频道路车道检测

    基于OpenCV的视频道路车道检测 前言 综述 运行方法 车道检测的实现 路面图像二值化 基于透视变换提取车道区域 基于二次多项式拟合车道线 基于二次多项式拟合车道线 计算曲率半径与车辆的偏移距离 用车道区域标注原始图像 总结 前言 本篇博
  • [CVPR-17] Focal Loss for Dense Object Detection

    目录 摘要 Introduction Focal Loss Focal Loss Definition RetinaNet FPN Anchors 推理 Focal Loss 摘要 在训练密集detectors时 前景 背景极度不平衡是on
  • STL源码剖析(五)——关联式容器

    1 概览 所谓关联式容器 观念上类似于关联式数据库 每笔数据都有一个键值 key 和实值 value 当元素被插入到关联式容器中 容器内部结构 可能是红黑树和哈希表 便依照键值大小 以某种特定规则将这个元素放置在适当位置 关联式容器没有所谓
  • WEB开发技术期末复习

    The content comes from teacher courseware 第一章 信息系统与java企业级规范 一 信息系统的类型 1 单机系统 单机系统的特点 数据显示 数据处理 数据存储在同一台计算机上进行 数据显示一般为图形
  • Illegal mix of collations ((latin1_swedish_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for报错

    Illegal mix of collations latin1 swedish ci IMPLICIT and gbk chinese ci COERCIBLE for operation 查看了数据库发现是建表时设置表的编码为latin
  • Git的Flow工作流分享

    最近我们团队对日常开发规范和版本控制等工作进行了调整 为此对GitFlow工作流以及它的各类变种也进行了学习 在此记录一下 只有一个Master分支带来的问题 首先我们回顾一下我们在日常与团队的合作开发一个项目中会遇到与版本控制相关的场景
  • 一些测试案例

    一些测试案例 微信发红包测试用例 功能 可移植性 性能 界面 安全性 易用性 水杯的测试用例 功能 界面 性能 安全性 兼容性 易用性 可移植性 抗震性 电梯的测试用例 功能测试 界面测试 易用性测试 安全性测试 性能测试 兼容性测试 淘宝
  • 【机器学习与深度学习理论要点】25.什么是归一化,为什么要进行归一化?

    1 归一化是指归纳同意样本的统计分布性 归一化在0 1之间是统计概率分布 归一化在 1 1之间是统计的坐标分布 2 归一化处理的目的 为了后面数据处理方便 归一化可以避免一些不必要的数值问题 为了程序运行时收敛加快 统一量纲 样本数据的评价
  • STM32+L298N+PWM可调速小车(四驱)

    完整工程代码已放到百度网盘 链接如下 链接 https pan baidu com s 16zcnfLt2iYlrDdN N6tKbA 提取码 dn54 一 L298N电机驱动板 电源引脚 VCC 外接直流电源引脚 电压范围在5 35V之间
  • import torchvision时提示ImportError: DLL load failed: 找不到指定的模块。

    ImportError DLL load failed 找不到指定的模块 本人使用的是windows anaconda4 6 11 安装torchvision 时使用的是pip install no deps torchvision pip
  • 卷积神经网络(convolutional neural network, CNN)

    卷积神经网络 convolutional neural network CNN 卷积神经网络 convolutional neural network CNN 是一种专门用来处理具有类似网格结构的数据的神经网络 卷积网络是指那些至少在网络的
  • 游戏计算机推荐,2020十大游戏笔记本电脑排名(最新游戏本推荐)

    2020十大游戏笔记本电脑排名 最新游戏本推荐 1 玩家国度冰刃3S 9代i7 RTX2070 240Hz超高刷新率电竞屏 2 外星人Alienware M15 银 红双色可选 144Hz 1080P电竞屏 3 联想Y7000P 2019
  • 真题详解(语法分析输入记号流)-软件设计(八十)

    真题详解 求叶子结点数 软件设计 七十九 https blog csdn net ke1ying article details 130787349 spm 1001 2014 3001 5501 极限编程XP最佳实践 测试先行 按日甚至按
  • Sublime Text 构建系统 - 学习整理

    Sublime Text 提供构建系统 Build Systems 构建系统可以调用外部程序来处理文件 也就是说 它可以调用一些脚本 或是编译器 解释器等 因此 构建系统的一个的常用示例就是编译 在本文 我们将重点放在构建系统本身上 构建系
  • FreeRTOS学习笔记—基础知识

    文章目录 一 什么是RTOS 二 前后台系统 三 实时内核 可剥夺型内核 四 RTOS系统 五 FreeRTOS系统简介 六 FreeRTOS源码下载 一 什么是RTOS RTOS全称为 Real Time OS 就是实时操作系统 核心在于
  • java android 中AES加解密帮助类封装

    AES就不说 网上一搜一把 直接上代码 import javax crypto Cipher import javax crypto spec IvParameterSpec import javax crypto spec SecretK
  • EF Core入门

    文章目录 前言 一 EF Core环境搭建 二 基本的增删改查 1 增加数据 2 查询数据 3 修改数据 删除数据 前言 EF Core是微软官方提供的ORM框架 EF Core不仅可以操作Microsoft SQL Server MySQ
  • vue两级select联动+input赋值+select选项清空

    vue两级select联动 input赋值 select选项清空 功能描述 根据select1的选项改变select2的选项 同时 根据select2的选项给input上的时间附上对应的值 当select1清空时将select2和input
  • c语言 前置声明,C语言编程开发前置声明都有哪些作用

    声明是我们在学习C语言编程开发的时候经常见到的一个设置条件 而今天我们就通过案例分析来了解一下 C语言编程开发前置声明都有哪些作用 前置声明是C C 开发中比较常用的技巧 主要用在三种情形 变量 常量 例如extern int var1 函