IAR编译出现“xxxxxxxx“ declared implicity”
在使用IAR编译C程序时出现function "xxxxxxx" declared implicity,说明在使用此函数之前没有对它声明,是隐式声明。
显示声明和隐式声明:
以BASIC为例
隐式和显式声明
默认情况下,Visual Basic 编译器强制使用“显式声明”,它要求在使用每个变量前先声明变量。可以去掉此要求并允许“隐式声明”。Visual Basic 提供了一个控制显式声明的开关。如果关闭此开关,则不用声明变量就可以使用变量。
可以用以下任何方法将显式声明开关设置为打开或关闭:
在集成开发环境 (IDE) 的“属性”窗口中设置合适的项目属性
指定 /optionexplicit 命令行编译器选项
将 Option Explicit 语句包含在代码的开头
如果使用 Option Explicit 语句,设置将重写项目属性和编译器选项设置,但只针对该语句所在的源代码文件。
将 Option Explicit 设置为 On 具有强制在编译时(而不是在运行时)进行类型推理的优点。这将提高性能。
隐式声明
如果关闭显式声明,则可以隐式声明变量,只需在代码中使用它即可。所有隐式声明的变量都具有 Object 数据类型。但是,如果显式声明所有变量并使用特定的数据类型,则应用程序的效率会更高。这将减少命名冲突错误和拼写错误的发生。它也允许编译器检测潜在的运行时错误,如将 Integer 赋给 Short。
可以写一个不声明局部变量的函数,如下例所示:
Function SafeSqrt(Num)
TempVal = Math.Abs(Num) ' Make sure value is positive for square root.
Return Math.Sqrt(TempVal)
End Function
Visual Basic 自动将 TempVal 创建为一个局部变量,可以像显式声明了该变量一样使用它。虽然这样很方便,但如果拼错了变量名,可能会在代码中导致细微的错误。假设在前面的示例中写了如下函数:
Function SafeSqrt(Num)
TempVal = Math.Abs(Num) ' Make sure value is positive for square root.
Return Math.Sqrt(TemVal)
End Function
此代码初看上去与原来的一样。但它拼错了 Sqrt 的参数 TempVal 变量,因此编译器将另外创建一个称为 TemVal 的局部变量,它不会被赋值,并且函数将总是返回零。
Visual Basic 遇到新名称时,它无法确定您是要隐式声明新变量还是仅仅拼错了现有变量,因此它用该名称创建一个新变量。另一种可能是,编译器可能已经定义了该名称,而代码将在不自觉中使用该定义。
通过使用显式声明可以避免由拼错变量名引起的问题。
显式声明
如果显式声明对前面的示例中包含 SafeSqrt 函数的模块有效,则 Visual Basic 会将 TempVal 和 TemVal 识别为未声明的变量,并对它们都生成错误。因此,应将 TempVal 显式地声明如下:
Function SafeSqrt(Num As Single) As Single
Dim TempVal As Single = Math.Abs(Num)
Return Math.Sqrt(TemVal)
End Function
通过这个修订过的代码,您会立即了解问题所在,因为 Visual Basic 会针对拼错的 TemVal 显示一条错误信息。鉴于显式声明有助于捕捉这些类型的错误,建议在所有代码中使用显式声明。
注意 Option Explicit 语句基于每个文件进行操作。该语句必须位于每个想用来控制显式变量声明的执行的源代码文件的开头。
IAR编译出现“xxxxxxxx“ declared implicity”相关推荐
- 已解决:IAR编译时出现duplicate definitions for IAR报错
IAR编译duplicate definitions for IAR报错解决办法 方法一:你需要将你的变量声明放在你的xx.c文件里面,不应该放在你的xx.h的头文件. 方法二:关于变量的声明,外部声 ...
- IAR编译的工程无法正常仿真的问题
问题描述 我们在用IAR进行开发的时候,比如开发CC254x或者CC26xx等等项目的时候,经常需要通过仿真来查看程序的运行过程以及查看某些变量的值的变化情况等,这个时候我们有可能遇到单步运行不执行某 ...
- IAR编译Z-Stack项目报错—Error[e46]: Undefined external “?V11” referred in AF
之前用IAR编译Z-Stack项目报错,网上找了好久,才找到解决方法,为了让更多人知道如何解决这个问题,下面把网址贴出来,按照TI社区的方法完美的解决了这个问题. https://e2echina.t ...
- IAR 编译时找不到头文件的解决方法
IAR 编译时找不到头文件的解决方法 参考文章: (1)IAR 编译时找不到头文件的解决方法 (2)https://www.cnblogs.com/kunx/p/9248106.html 备忘一下.
- 文件路径名太长导致IAR编译报错:Fatal Error[Pe1696]: cannot open source file
在用IAR编译CC2640R2F工程的时候,报错: gattservapp_util.c Fatal Error[Pe1696]: cannot open source file "xd ...
- IAR编译出现Error[Pe147]: declaration is incompatible with “__interwork __vfp int dir_get_dout()“ 报错
IAR编译出现Error[Pe147]: declaration is incompatible with "__interwork __vfp int dir_get_dout()&quo ...
- [IAR] 编译报错:Variable expansion failed for Pre-Build command line
这里写目录标题 项目场景: 问题描述: 原因分析: 解决方案: 项目场景: 导入工程,编译报错. Variable expansion failed for Pre-Build command lin ...
- MSP430F435 c语言IAR编译软件报错解决方法笔记
IAR编译软件报错解决方法 1.问题一:堆栈溢出出现警告.已进入主函数就开始报警堆栈溢出. 报错原因:在主函数中定义了大量的大数组,看门狗已经关闭,但仍未完成数据初始化,导致堆栈溢出. 解决方法:定义 ...
- IAR编译时报错Error[e46]: Undefined external _delay_cycles referred in main
IAR编译时报错Error[e46]: Undefined external "_delay_cycles" referred in main 学习MSP430过程中遇到有如下一个 ...
最新文章
- 一、mysql分表简单介绍
- 这个开源数据集要在全球扩大中文NLP影响力,你也能来做贡献!
- HttpWebRequest自动登录网站并获取网站内容(不包含验证码的网站)
- 修改placeorder html,数字分发Web服务DDWSPlaceOrder-服务手册-Partner.PDF
- 第一行Java代码,java高级面试笔试题
- 使用angular4和asp.net core 2 web api做个练习项目(四)
- pytorch 保存模型,加载预训练模型问题
- N个例子让你彻底理解java接口回调
- Racket编程指南——1 欢迎来到Racket!
- Windows10系统以太网显示“未识别的网络”如何解决
- 24段魔尺拼图指南_拼图项目动手指南
- MarkDown一些有用的小技巧
- 机器学习在重度抑郁症患者中的应用:从分类到治疗结果预测
- numeric scale mysql_MySQL基础教程1 — 数据类型之数值类型 - numeric
- leetcode 栈739. 每日温度
- mini-css-extract-plugin源码解析
- MySQL查询时不加order by的时候默认排序规则是什么?
- 全球与中国涂料和油墨用丙烯酸树脂市场发展规划展望及未来需求预测报告2021年版
- EasyNVR更新版本后如何同步RTSP通道?
- Waymo van参与亚利桑那州的严重碰撞
热门文章
- DNA修饰金属锇Os纳米颗粒OsNPS-DNA|DNA修饰金属铱纳米颗粒IrNPS-DNA
- 环洋市场调研-2022年全球活性炭纤维 (ACF)市场总体规模及应用细分研究报告
- LAMP项目部署实战1
- 实时分析运营数据和用户行为,助力敏捷决策
- 为什么DTC品牌出海一定要做私域营销,这是我见过最有用的答案
- 青瓷引擎之纯JavaScript打造HTML5游戏第二弹——《跳跃的方块》Part 7(服务器连接数据处理)...
- Scrapy + 案例
- SpringBoot技术实践-SpELEL表达式
- mysql根据经纬度查询范围内的数据
- 公链的历史交叉口:PoS还能走多远?