功能福建省体彩网简介

使用C开发嵌入式系统时,一个关键工具是了解福建省体彩网的工作方式。对福建省体彩网基础知识的误解会导致调试系统花费大量时间,或者使隐藏的错误暴露在客户面前。函数福建省体彩网是最常被误解和忽略的福建省体彩网工具之一。


函数福建省体彩网与任何其他福建省体彩网类型相同,只不过它们指向函数而不是变量类型。然后可以使用福建省体彩网来调用所指向的函数。这使得在开发嵌入式系统时可以使用多种技术。例如,可以在任务计划程序中使用函数福建省体彩网来动态调用从任务表​​执行的函数。它们可用于复杂的状态机或switch语句中,以减少决策开销并将状态分解为可管理和可维护的块。

由于担心复杂性和缺乏理解,函数福建省体彩网经常会受到不好的说唱。甚至有些公司甚至禁止使用它们!尽管有些开发人员为了避免使用函数福建省体彩网而采取了严厉的措施,但它们实际上是每个开发人员都应该在其工具包中拥有的工具。本篇以及接下来的几篇文章将探讨如何定义函数福建省体彩网,它们所服务的不同应用目的以及如何安全地使用它们。

函数福建省体彩网的声明与任何其他函数的声明非常相似。它需要一个返回类型,声明名称和参数列表。声明函数福建省体彩网的主要区别是声明名称前面带有*,然后必须用括号括起来。不将声明名称括在括号中将导致编译器错误。清单1显示了一个简单函数的示例函数福建省体彩网声明,该函数不带参数且不返回任何内容。

无效(* FuncPtr)(无效);

清单1. void函数的函数福建省体彩网声明


清单1展示了函数福建省体彩网的最简单定义,但是可以声明函数福建省体彩网类型的任何组合。例如,清单2显示了复杂性增加的其他函数福建省体彩网的定义。请记住,函数福建省体彩网声明的参数与其指向的函数相同!这意味着几乎无限的可能的函数福建省体彩网定义。

无效(* FuncPtr)(int);
int(* FuncPtr)(int);
int(* FuncPtr)(int,char *);
int *(* FuncPtr)(int,int,char,char *);
int *(* FuncPtr)(int,int,char,void(* FuncPtr2)(void));

清单2.函数福建省体彩网声明示例


声明函数福建省体彩网的符号看起来很丑陋和复杂。但是,在某些情况下,一次又一次地重复使用同一福建省体彩网声明。当函数福建省体彩网需要多次声明相同的符号时,使用typedef声明函数福建省体彩网非常有用。这允许使用更简单的声明来定义函数福建省体彩网。清单3显示了如何创建typedef的示例。

typedef int *(* FuncPtr)(int *);

清单3.函数福建省体彩网的类型声明


使用typedef可以很简单地声明新的函数福建省体彩网并进行设置。实际上,它开始看起来完全像其他任何福建省体彩网声明一样。清单4显示了NewPtr的声明,然后将其设置为指向Function1。

FuncPtr NewPtr;
NewPtr =&Function1;

清单4.函数福建省体彩网方法1的声明


可以通过两种不同方式设置福建省体彩网。第一个如清单4所示,第二个如清单5所示。这两种方法可以互换使用,只是在&(获取)运算符的地址。

FuncPtr NewPtr;
NewPtr =Function1;

清单5.函数福建省体彩网声明方法2


有两种不同的调用方法可用于执行指向函数。如清单6所示,第一个看上去与调用普通函数完全相同。第二个看上去类似于函数福建省体彩网声明。它需要使用*来取消引用福建省体彩网的地址,然后再次用括号将福建省体彩网括起来。清单7显示了第二种方法。

结果= NewPtr(intPtr);

清单6.调用方法1

 

结果=(* NewPtr)(intPtr);

清单7.调用方法2


两种方法都可以调用该函数,但是使用第二种方法会有所帮助。它看起来确实更复杂,但是很显然NewPtr是一个函数福建省体彩网,而不仅仅是一个常规函数。这样可以确保,如果福建省体彩网的命名方式不明显,则在维护过程中不会造成误解。

使用函数福建省体彩网时,在调用函数福建省体彩网之前,必须进行检查以确保已设置福建省体彩网,这一点绝对重要。原因是,如果尚未设置福建省体彩网,则应用程序将在其指向的位置开始执行代码!如果福建省体彩网在杂草中指出,那么系统很可能会崩溃!可以检查的最小值是在执行函数之前福建省体彩网不等于零!如清单8所示。根据应用程序的不同,可以执行其他检查以验证福建省体彩网中存储的值正确并且应该执行。

如果(NewPtr!= 0U)
{
结果=(* NewPtr)(intPtr);
}

清单8.在执行之前检查福建省体彩网是否有效

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.