C语言之extern声明辨析

单反相机物镜设计[DG-10] REAR(要打在像面,操作数要找像面对应位置15):以透镜单位表示的真实光线径向坐标,波长由Wave定义,参见“Hx、Hy、Px和Py”。最小玻璃厚度最小不能小于semi-dia的1/10,要根据layout看有没有过厚过薄,反复调节。PROD:两个操作数的乘积(操作#1 X操作#2)。3x4就是57.3x0.41=23.5。拦光一般在第一面和最后一面操作,减少边缘无用光线。光阑面与镜面贴近,要调距离,同时设置光阑像差。后截距是指从镜头后表面到焦点的距离。CONS:弧度转为角度。镜头相互嵌入,有错误。 阅读详情
                                                                 C语言之 extern声明辨析

  1 基本解释

  extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。

  另外,extern也可用来进行链接指定。


  2 问题:extern 变量

  在一个源文件里定义了一个数组:

char a[6];

  在另外一个文件里用下列语句进行了声明:

extern char *a;


  请问,这样可以吗?

  答案与分析:

  1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。

  2)、例子分析如下,如果a[] = "abcd",则外部变量a=0x61626364 (abcd的ASCII码值),*a显然没有意义,如下图:

  显然a指向的空间(0x61626364)没有意义,易出现非法内存访问。

  3)、这提示我们,在使用extern时候要严格对应声明时的格式,在实际编程中,这样的错误屡见不鲜。

  4)、extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。

  3 问题:extern 函数1

  常常见extern放在函数的前面成为函数声明的一部分,那么,C语言的关键字extern在函数的声明中起什么作用?

  答案与分析:

  如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:

 

extern int f(); 和int f();


  当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,我比较习惯在所有的函数声明前添加extern修饰。

  4 问题:extern 函数2

  当函数提供方单方面修改函数原型时,如果使用方不知情继续沿用原来的extern申明,这样编译时编译器不会报错。但是在运行过程中,因为少了或者多了输入参数,往往会照成系统错误,这种情况应该如何解决?

  答案与分析:

  目前业界针对这种情况的处理没有一个很完美的方案,通常的做法是提供方在自己的xxx_pub.h中提供对外部接口的声明,然后调用方include该头文件,从而省去extern这一步。以避免这种错误。

  宝剑有双锋,对extern的应用,不同的场合应该选择不同的做法。

  5 问题:extern “C”

  在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?

  答案与分析:

  C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。

  下面是一个标准的写法:

 

//在.h文件的头上
#ifdef __cplusplus
#if __cplusplus
extern "C"{
 #endif
 #endif /* __cplusplus */
 …
 …
 //.h文件结束的地方
 #ifdef __cplusplus
 #if __cplusplus
}
#endif
#endif /* __cplusplus */

使用自制的NTC测量模块测试Plecs的热仿真效果 可以测试:您完全可以用这个模型来测试热仿真。NTC 模型是连接电气域和热域的关键桥梁。实现闭环:通过这种方式,您创建了一个高度真实的正反馈闭环系统:负载增加 -> 损耗增加 -> 温度升高 -> NTC 阻值变化 -> 控制电路可能因此调整(如降低频率或电流)-> 损耗变化 -> 温度变化。应用场景:这对于设计过温保护 (OTP) 电路风扇控制系统以及分析热失控条件非常有用。单位:确保热域中使用的单位( Kelvin 或 Celsius )与您的 C-Script 模型输入期望的单位一致。 阅读详情

相关推荐

禾赛PandarXT-16/阿努比LpmsIG1运行lio-sam

课题是多传感器融合,将GNSS/INS/LIDAR做融合定位导航,故考虑使用lio-sam开源算法,在此记录一下我在适配传感器数据时遇到的一些问题;

qq_44705939的博客 2961

简要介绍C/C++中的两个extern

C语言中有一个extern,C++中也有一个extern,两者是不同的。 首先C语言中的extern 先补充一个知识点:C语言中是单文件编译的,即先单个文件自上而下完成编译,然后再将编译得到的.o文件同库文件一起链接成可执行文件(源文件到可执行文件的四个阶段:预处理,编译,汇编,链接)。 当一个工程中有多个文件时(多文件编程),要使用全局变量,往往需要使用extern修饰声明。 全局变量本...

Eason_Grace的博客 444

实验记录 | 如何拆分scATAC-seq数据成为单个细胞?(1、解决barcode问题)

在师兄的帮助下,我得到了师兄筛选过的细胞的barcode的数据,那么接下来我想根据这些barcode,将来源于同一个barcode的细胞的reads提取出来,这个还是一个蛮有技术含量的事情的,因为上次我有使用过perl的脚本进行提取,最后的实验结果很糟糕,故而这件事情一直搁置到现在,没有继续去做(我的脚本的编写能力还是有待于加强,可能是刚刚喝了奶茶,和老妈弟弟聊了好多闲话,很开心,觉得在某种程度上休息够了,对于工作也是一种非常快乐和积极的状态了)。 0。前期失败尝试回顾 ...

weixin_40640700的博客 1887

extern关键字的用法——多个.c文件之间的相互联系

extern关键字的两个基本作用 1、当一个变量的声明不在文件的开头,在它声明之前的函数想要引用的话,则应该用extern进行“外部变量”声明。 下面用一个简单的程序介绍extern关键字的这种用法,我们知道有这么回事就够了,只要能够看懂别人这样写就行了,自己写程序的时候就不要这么写了。 #include <reg52.h> sbit LED=0; void main () { ex...

Bornpride的博客 2887

超详细!思岚S2激光雷达hector_mapping建图

使用思岚S2激光雷达,在ros平台上利用hector_mapping功能包实现建图功能

m0_50965539的博客 5591

记一次wireshark抓取QQ好友IP和火绒抓取微信IP

事情是这样的,,上个周,手机离奇的被盗,但没有关机,为了找回手机,粗学了一手QQ抓ip的手段。 这里我就直接做个演示,解析关键的点。 三种思路i. wireshark 抓取手机在线IPii 火绒抓取 微信在线接听IPiii 火绒抓取 微信在线不接听IP i. wireshark 抓取手机在线IP wireshark抓好友QQ的ip要求和对方打语音的时候要手机在线。 这里说一下,打语音和视频是直接能和对方建立连接,如果发文件,是直接发给腾讯的,抓不到包。 1.打开wireshark,通过电脑Tim给对方打语音

qq_29437513的博客 1万+

extern “C“ 用法详细说明

转载:extern"C"的用法(一)_Sean_新浪博客 extern"C"的用法(一) 首先,先看一下下面这个例子: 图1案例 它到底有什么用呢,这样的问题会出现在面试or笔试中,我觉得作为一个学C++的童鞋,应该了解一下。下面我就从以下几个方面来介绍它: 1、#ifdef _cplusplus/#endif _cplusplus 2、extern "C" 2.1、extern关键字 2.2、"C" 2.3、小结extern "C" 3、C和C+...

weixin_40593838的博客 4万+

数仓 - 促销敏感度、评论敏感度

1. 促销敏感度 步骤1. 首先按照最后一次下单时间及有无复购情况将用户分为四大群体: 近一年有购物行为且复购的用户 -- L1 (今年复购用户) 近一年有购物行为但无复购的用户 --L2 (今年一单购用户) 最后一次下单时间在1年之前且有复购的用户 --L3 (今年无购且只有一单用户) 最后一次下单时间在1年之前但无复购的用户 -- L4 (今年无购多单用户) 步骤2. 每一类用户群再根据优惠订单占比、每单优惠金额占比的平均值、优惠金额这三个指标进行k-means聚类,分为: 非常敏感 -

weixin_41332009的博客 1899

如何使用extern在源文件之间共享变量?

我知道C中的全局变量有时具有extern关键字。 什么是extern变量? 声明是什么样的? 它的范围是什么? 这与跨源文件共享变量有关,但是它如何精确地工作? 我在哪里使用exte

p15097962069的博客 2490

基于vivado实现FFT/IFFT

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、实现的功能二、配置1.调用DDS的IP核2.调用FFT的IP核三、结果分析1.调用DDS的IP核2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、实现的功能 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任

qq_45600102的博客 1万+

用户存续期价值评估CLV(二) BG/NBD Model python模拟

BG/NBD Model …继续 想象每一个客户有两个硬币,一个“Buy Coin"控制客户购买的概率;一个"Die Coin"控制客户流失、不再购买的概率。 前面假设了客户的交易次数服从泊松过程: 在一年中的每个月,客户都以抛硬币的方式来决定是否购买。我们所观察到的购买次数取决与泊松分布的参数 ????。 %matplotlib inline import numpy as np impor...

weixin_43171270的博客 3426

c语言extern声明两个参数不同的函数,C语言之extern声明辨析[2]

C语言之extern声明辨析[2]以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   问题 extern 函数  常常见extern放在函数的前面成为函数声明的一部分 那么 C语言的关键字extern在函数的声明中起什么作用?  答案与分析   如果函数的声明中带有关键字extern 仅仅是暗示这个函数可能在别的源文件...

weixin_39527768的博客 434

在 SAP 里玩转 FTP:标准程序 RSFTP00x 全景解析与落地实践

摘要:SAP系统通过封装的标准FTP程序(RSFTP001-008)提供便捷的文件传输能力,适用于各类集成场景。关键点包括:1)依赖SAPFTP可执行程序和RFC目的地;2)使用RSFTP005进行前置检查并生成RFC配置;3)标准报表各司其职,如RSFTP002用于命令测试、RSFTP007/008提供参考实现;4)开发时组合FTP_CONNECT/COMMAND/DISCONNECT等函数模块。特别注意前台(SAPFTP)与后台(SAPFTPA)的环境差异,这是常见故障点。该方案通过标准化工具链显著降低

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 210

C语言extern声明辨析

1 基本解释  extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。  另外,extern也可用来进行链接指定。2 问题:extern 变量  在一个源文件里定义了一个数组:char a[6];  在另外一个文件里用下列语句进行了声明:extern char *a;  请问,这样可以吗?   答案与分析:  1)

浩瀚星空,法力无边;其大无外,其小无内。 2504

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C语言之extern声明辨析(zz)

1 基本解释   extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。   另外,extern也可用来进行链接指定。   2 问题:extern 变量   在一个源文件里定义了一个数组: char a[6];    在另外一个文件里用下列语句进行了声明: extern char *a;    请问,这样可以吗?   答案与分

afxid的专栏 1719

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

水滴石穿C语言之extern声明辨析

  1、概述  static 声明的变量在C语言中有两方面的特征:  1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。    2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。  2、问题:Static的理解  关于static变量,请选择下面所有说法正确的内容:  A、若全局变

小发猫 1834

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C - extern声明辨析

C语言之extern声明辨析 http://yxmyifeng.blog.163.com/blog/static/129789782201001893621293/ C语言之extern声明辨析   1 基本解释   extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函...

weixin_30545285的博客 186
上一篇: NONO函数
下一篇: Heap/BSS 溢出机理分析
bmsdr
博客等级 码龄22年 11粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值