做英文企业网站/百度保障中心人工电话

做英文企业网站,百度保障中心人工电话,山东建设网站首页,php网页设计目录 总述 一、声明外部变量 二、声明外部函数 三、实现模块化编程 四、与"C" 连用,实现C和C的混合编程 五、注意事项 六、疑点补充(你可能会有和我一样的疑问?) 总述 在C和C中,extern关键字用于声明外…

目录

总述

一、声明外部变量

二、声明外部函数

 三、实现模块化编程

四、与"C" 连用,实现C和C++的混合编程

 五、注意事项

六、疑点补充(你可能会有和我一样的疑问?)


总述

       在C和C++中,extern关键字用于声明外部全局变量变量或函数,表明它们的定义位于其他文件中,从而允许在不同源文件之间共享变量和函数。以下是extern的常见用法:

一、声明外部变量

一)用法

       在一个源文件中定义全局变量后,在其他源文件中使用extern声明该变量,以便访问它。

二)示例

        file1.c:定义全局变量

int globalVar = 10;

        file2.c:声明并使用该变量

extern int globalVar;void func(){printf("globalVar = %d\n",globalVar);
}

二、声明外部函数

一)用法

        在一个源文件中定义函数后,在其他源文件中使用extern声明该函数,以便调用它。

二)示例

        file1.c:定义函数

void func(){//函数实现
}

        file2.c:声明并调用该函数

extern void func();int main(){func();return 0;
}

 三、实现模块化编程

一)用法

        将extern声明放在头文件中,以便多个源文件包含头文件后共享变量和函数。

二)示例

        header.h

#ifndef HEADER_H
#define HEADER_Hextern int globalVar;
extern void func();#endif

        file1.c

#include "header.h"int globalVar = 10;
void func(){//函数实现
}

        file2.c

#include "header.h"void anotherFunc(){printf("globalVar = %d\n",globalVal);func();
}

四、与"C" 连用,实现C和C++的混合编程

一)用法

        在C++中,使用extern "C"指定按照C语言规则进行函数名修饰和链接,以便调用C语言编写的库函数或在C语言中调用C++编写的函数。

二)示例

        C++代码调用C函数

extern "C"{#include "c_library.h"
}int main(){c_function();return 0;
}

        C代码调用C++函数

//C++ code
extern "C" void cpp_function(){//函数实现
}

 五、注意事项

一)声明与定义的区别

        extern用于声明变量或函数,定义时需要分配内存空间。变量只能定义一次,但可以多次声明。

二)头文件保护

        在头文件中使用extern声明变量或函数时,应配合条件编译指令(如#ifndef、#define、#endif)防止头文件被重复包含。

        通过合理使用extern关键字,可以提高代码的组织性和可维护性,实现模块化编程,并支持C和C++混合编程。

六、疑点补充(你可能会有和我一样的疑问?

问:extern 引用的变量可以赋值吗?

答:在 C 和 C++ 中,使用 extern 关键字声明的变量本质上是一个指向已经在其他地方定义的变量的引用。它的主要作用是告诉编译器这个变量在其他文件中定义,可以在当前文件中使用。关于赋值的问题,下面是一些要点:

一)赋值效果:虽然在声明时使用 extern 不允许你直接给这个变量赋初始值,但你可以在任何地方(通常是在其定义所在的文件中)对其进行赋值。例如:

//file1.c
int myVar; // 定义
myVar = 10; // 可以赋值//file2.c
extern int myVar; //引用变量,不能初始化
myVar = 20; //可以赋值,虽然在其他文件中被引用void modifyValue(){myVar = 30; // 可以赋值
}int main(){modifyValue();printf("myVar = %d\n",myVar);return 0;
}

 二)初始化与赋值如果在同一作用域内声明变量,extern声明的变量不能被初始化。例如:

extern int myVar = 10; //错误:无法初始化extern声明的变量

三)在函数内:在函数内部,你可以访问extern声明的变量并对其赋值,但前提是该变量在其他地方有定义。

        总之,extern引用的变量是可以被赋值的在声明时不能直接初始化它

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

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

相关文章

Jboss漏洞再现

一、CVE-2015-7501 1、开环境 2、访问地址 / invoker/JMXInvokerServlet 出现了让下载的页面,说明有漏洞 3、下载ysoserial工具进行漏洞利用 4、在cmd运行 看到可以成功运行,接下来去base64编码我们反弹shell的命令 5、执行命令 java -jar ysoserial-…

Android平台毫秒级低延迟HTTP-FLV直播播放器技术探究与实现

一、前言 在移动互联网蓬勃发展的今天,视频播放功能已成为众多Android应用的核心特性之一。面对多样化的视频格式和传输协议,开发一款高效、稳定的视频播放器是许多开发者追求的目标。FLV(Flash Video)格式,尽管随着H…

组件日志——etcd

目录 一、简介 二、安装【Ubuntu】 安装etcd 安装CAPI 三、写一个示例 3.0写一个示例代码 3.1获取一个etcd服务 3.2获取租约(写端操作) 3.3使用租约(写端操作) 3.4销毁租约(写端操作) 3.5获取etcd服务中的服务列表(读端操作) 3.6监听状态变化(读端操作) 一、简介 Et…

python网络爬虫开发实战之网页数据的解析提取

目录 1 XPath的使用 1.1 XPath概览 1.2 XPath常用规则 1.3 准备工作 1.4 实例引入 1.5 所有节点 1.6 节点 1.7 父节点 1.8 属性匹配 1.9 文本获取 1.10 属性获取 1.11 属性多值匹配 1.12 多属性匹配 1.13 按序选择 1.14 节点轴选择 2 Beautiful Soup 2.1 简介…

理解操作系统(一)冯诺依曼结构和什么是操作系统

认识冯诺依曼系统 操作系统概念与定位 深⼊理解进程概念,了解PCB 学习进程状态,学会创建进程,掌握僵⼫进程和孤⼉进程,及其形成原因和危害 1. 冯诺依曼体系结构 我们常⻅的计算机,如笔记本。我们不常⻅的计算机&am…

Tomcat常见漏洞攻略

一、CVE-2017-12615 漏洞原理:当在Tomcat的conf(配置⽬录下)/web.xml配置⽂件中添加readonly设置为false时,将导致该漏洞产 生,(需要允许put请求) , 攻击者可以利⽤PUT方法通过精心构造的数据包…

Linux上位机开发实战(camera视频读取)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 关于linux camera,一般都是认为是mipi camera,或者是usb camera。当然不管是哪一种,底层的逻辑都是v4l2&#x…

Python实现deepseek接口的调用

简介:DeepSeek 是一个强大的大语言模型,提供 API 接口供开发者调用。在 Python 中,可以使用 requests 或 httpx 库向 DeepSeek API 发送请求,实现文本生成、代码补全,知识问答等功能。本文将介绍如何在 Python 中调用 …

山东大学数据结构课程设计

题目:全国交通咨询模拟系统 问题描述 处于不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能地短,出门旅游的旅客则期望旅费尽可能省,而老年旅客则要求中转次数最少。编织一个全国城市间的交…

内网渗透技术 Docker逃逸技术(提权)研究 CSMSF

目录 如何通过上传的webshell判断当前环境是否是物理环境还是Docker环境 方法一:检查文件系统 方法二:查看进程 方法三:检查网络配置 方法四:检查环境变量 方法五:检查挂载点 总结 2. 如果是Docker环境&#x…

数据结构与算法-数据结构-树状数组

概念 树状数组,也叫二叉索引树(Binary Indexed Tree,BIT),它是用数组来模拟树形结构。树状数组的每个节点存储的是数组中某一段的和(或其他可合并的信息),通过巧妙的索引方式和树形…

使用 patch-package 优雅地修改第三方依赖库

在前端开发中,有时我们需要对第三方依赖库进行修改以满足项目需求。然而,直接修改 node_modules 中的文件并不是一个好方法,因为每次重新安装依赖时这些修改都会丢失。patch-package 是一个优秀的工具,可以帮助我们优雅地管理这些…

马科维茨均值—方差理论推导过程

下面给出一个详细的、符号严谨、公式连贯的马科维茨均值—方差理论推导过程,假设你输入了 nnn 列股票的历史收盘价数据。我们从数据符号的定义开始,逐步构建所有公式,并详细解释每个符号的意义。

仅靠prompt,Agent难以自救

Alexander的观点很明确:未来 AI 智能体的发展方向还得是模型本身,而不是工作流(Work Flow)。还拿目前很火的 Manus 作为案例:他认为像 Manus 这样基于「预先编排好的提示词与工具路径」构成的工作流智能体,…

【css酷炫效果】纯CSS实现悬浮弹性按钮

【css酷炫效果】纯CSS实现悬浮弹性按钮 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492020 缘 创作随缘,不定时更新。 创作背景 刚看到csdn出活动了&…

决策树基础

决策树 定义 从根节点开始,也就是拥有全部的数据,找一个维度对根节点开始划分, 划分后希望数据整体的信息熵是最小的, 针对划分出来的两个节点,我们继续重复刚才的划分方式寻找信息熵最小的维度和阈值。 递归这个…

动态查找表

1.问题分析: 动态查找表是一种可以动态地插入、删除和查找元素的数据结构。它是基于二叉搜索树实现的,具有快速的查找和插入操作。 以下是一些关于动态查找表的问题分析: 1. 插入操作:在动态查找表中插入一个元素时&#xff0c…

得分匹配的朗之万动力学——Score-Matching Langevin Dynamics (SMLD)

得分匹配的朗之万动力学——Score-Matching Langevin Dynamics (SMLD) 文章目录 得分匹配的朗之万动力学——Score-Matching Langevin Dynamics (SMLD)摘要Abstract周报内容0. 上期补充1. 本期的基本思想2. 从一个分布中采样(Sampling from a Distribution&#xff…

字节DAPO算法:改进DeepSeek的GRPO算法-解锁大规模LLM强化学习的新篇章(代码实现)

DAPO算法:解锁大规模LLM强化学习的新篇章 近年来,大规模语言模型(LLM)在推理任务上的表现令人瞩目,尤其是在数学竞赛(如AIME)和编程任务中,强化学习(RL)成为…

【Qt】QWidget的styleSheet属性

🏠个人主页:Yui_ 🍑操作环境:Qt Creator 🚀所属专栏:Qt 文章目录 前言1. styleSheet属性2. 利用styleSheet属性实现简单的日夜模式切换2.1 知识补充-计算机中的颜色表示 3. 总结 前言 style?好像前端的st…