IAR编译出现“xxxxxxxx" declared implicity”
来源:互联网 发布:c语言判断时间间隔 编辑:程序博客网 时间:2024/04/30 06:38
在使用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编译出现“statement is unreachable”
- keil编译出现function abs declared implicitly的解决方法
- IAR for 8051 编译出现Error[e72]错误提示,解决办法
- [IAR]Win7升级成Win10后用IAR编译项目出现System Error Code: 704
- xxxxxxxx
- xxxxxxxx
- hash_set, hash_map在linux下编译出现not declared的解决方法
- MDK中编译出现warning: function "xxx" declared implicitly 警告的解决办法
- Apktool编译出现“error: Public symbol aaa/bbb declared here is not defined.”的解决办法
- Arduino- 编译引用 IRremote 出现 error: ‘TKD2′ was not declared in this scope
- IAR Warning[Pe223]: function 'assert_param' declared implicitly 解决方法
- IAR编译错误
- IAR的编译过程
- IAR编译常见错误。
- IAR编译错误
- STM8 IAR 编译问题
- IAR编译常见错误
- 模运算的世界--线性同余方程组
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
- vs2015如何设置类或函数前不显示引用的数量
- 功能测试用例设计策略
- 读书01《知道做到》
- IAR编译出现“xxxxxxxx" declared implicity”
- eclipse常用快捷键
- 【美团点评】无人驾驶算法工程师 2017-09-03电话面试
- 通达oa破解版|通达oa破解版2017|通达oa破解补丁
- 技术挂帅独创多项专利:面向企业级用户,他们认为开源是一种信任
- qt之Access数据库的知识点
- atoi函数和itoa函数用法
- 一个权限管理系统如何设计
- 51nod 1050 循环数组最大子段和(最大连续子段问题)