当前位置: 首页 > 知识库问答 >
问题:

一个什么都不做的函数有什么实际用途吗?

彭鸿哲
2023-03-14

运行时不执行任何操作的函数是否有任何用处,即:

void Nothing() {}

请注意,我所说的不是等待一定时间的函数,如sleep(),而是编译器/解释器所花费的时间。

共有3个答案

罗光华
2023-03-14

当我创建包含函数指针的表时,我确实使用空函数。

例如:

typedef int(*EventHandler_Proc_t)(int a, int b); // A function-pointer to be called to handle an event
struct 
{
   Event_t             event_id;
   EventHandler_Proc_t proc;
}  EventTable[] = {    // An array of Events, and Functions to be called when the event occurs
    {  EventInitialize, InitializeFunction },
    {  EventIncrement,  IncrementFunction  },
    {  EventNOP,        NothingFunction    },  // Empty function is used here.
};

在这个示例表中,我可以将NULL替换为NothingFunction,并在调用它之前检查. proc是否为NULL。但我认为在表中放置什么都不做的函数会使代码更简单。

公羊学义
2023-03-14

对相当多的事情需要一个函数来通知发生的特定事情(回调)。一个什么都不做的函数是表示“我不在乎这个”的好方法

我不知道标准库中有任何示例,但许多构建在上面的库都有用于事件的函数指针。

例如,glib定义了一个回调“GLib. LogFunc(log_domain、log_level、消息、*user_data)”用于提供记录器。空函数将是您在禁用日志记录时提供的回调。

刁丰羽
2023-03-14

这样的函数作为回调函数可能是必要的。

假设您有一个如下所示的函数:

void do_something(int param1, char *param2, void (*callback)(void))
{
    // do something with param1 and param2
    callback();
}

此函数接收指向它随后调用的函数的指针。如果您不特别需要将此回调用于任何事情,您将传递一个什么都不做的函数:

do_something(3, "test", Nothing);
 类似资料:
  • 这是我的第一个JMH基准测试。我可能做错了一切,但是... 我的基准看起来是这样的 是我开始的...等了又等,然后杀了它。我怀疑在< code>@Setup中有问题,所以我简化了它,但是什么都没有改变。这场赛跑开始时相当乐观... 然后什么都没发生。过了很长时间,它继续写下20行像 和5行像 然后它输出一些结果 并更正其估计的eta: 我的是否比我想象的更频繁地被调用,或者还有什么其他原因导致了缓

  • 问题内容: 什么是真正做? 它的定义是 刷新实体时,此字段中保存的所有实体也会刷新 但这实际上意味着什么?有人可以给我一个简单的例子吗? 问题答案: 单独的CascadeType描述可能会有些混乱,但是有一种简单的方法可以从一般情况中找出来。 对于任何值,这意味着如果使用接口在实例上调用了操作,并且该实例具有对其他实体实例的引用,并且已经定义了关联,则该操作也将应用于该关联实体。 因此定义为: 从

  • 在Java中,什么与Python的pass等效?我意识到我可以使用continue语句或不完成语句体来实现这种效果,但我喜欢使用pass语句。

  • 我的配置文件是类路径的路径。至少我认为是这样。我放置了log4j。资源文件夹中的属性文件,而log4j对此不做任何处理。即使我删除了它,也不会发生错误。 任何人都可以看到,我在使用maven LoggerTest的内容: 程序输出: log4j的内容。属性: 在波姆。xml并不是什么不同寻常的东西,只是一个依赖组织。阿帕奇。登录中。log4j log4j内核2.17.2,编译器源目标是16,没有插

  • 问题内容: ECMAScript 6中引入的数据结构的实际用途是什么? 由于弱映射的键会对其对应的值建立强引用,因此确保只要弱键仍处于活动状态,插入到弱映射中的值就 永远不会 消失,因此不能将其用于备忘录表,缓存或通常使用弱引用,具有弱值的映射等的其他任何内容。 在我看来,这是: …只是一种回旋的说法: 我缺少哪些具体用例? 问题答案: 从根本上 WeakMaps提供了一种从外部扩展对象而不干扰垃

  • ECMAScript 6中引入的数据结构的实际用途是什么? 由于弱映射的键创建对其对应值的强引用,确保插入到弱映射中的值在其键仍处于活动状态时永远不会消失,因此它不能用于备注表、缓存或您通常使用弱引用、具有弱值的映射等的任何其他内容。 在我看来: …只是一种迂回的说法: 我缺少哪些具体的用例?