用于函数指针表的无操作设备?

时间:2014-01-18 04:26:37

标签: c lookup

void table_no_op()
{
// this is for function table elements that do nothing,
// fills space between states, use less of them
    return;
}

我目前正在使用它在函数指针表中定义“零”,其中输入索引应该什么也不做。是没关系还是明显错误的?

1 个答案:

答案 0 :(得分:4)

虽然no-op本身没有任何问题(一般来说,这称为Null对象模式),我会担心函数声明 - 即表中的每个函数都是0参数并返回void吗? / p>

一个反例是OpenGL,你经常检索一个指向函数的指针并自己将它转换为所需的类型 - 但是将一个void-> void指针转换为其他东西,例如: (int,int) - > int将是未定义的行为,可能导致崩溃(或未初始化的返回值,否则)。

因此,如果表中的函数是同质的 - 那就去吧。如果不是 - 最好做别的事。

编辑:你只能用函数指针做两件事 - 把它投射到另一个函数指针;和呼叫,但只与原始类型。

有关详细信息,请参阅http://blog.frama-c.com/index.php?post/2013/08/24/Function-pointers-in-C。 Raymond Chen在这里有另一个例子 - http://blogs.msdn.com/b/oldnewthing/archive/2011/05/06/10161590.aspx

EDIT2:但是,你可以制作一些no_ops(noop_IntInt_Int,noop_IntDouble_Double等等......那么如果你每次都匹配这些类型,那可能会有效)