这种接口的技术术语是什么?

All*_*len 3 c interface

我使用嵌入式软件,遇到了(以及从这个模型中复制过的)我在大学时从未学过的界面(新毕业).它允许代码库在library function不知道library用它编译的内容的情况下进行调用,假设它们都具有相同的内容function.下面的例子只显示了一个radio1,但是假设有一个radio2,radio3等通过makefile.

在编译中,library我们执行以下操作.在.c源文件中,function声明和接口struct:

// function bodies that do things
void radio1_init_radio(void) {}
void radio1_calibrate_radio(void) {} 

// populate global tune interface
const struct tune_if_t tune_if =
{
    .init_radio        = radio1_init_radio,
    .calibrate_radio   = radio1_calibrate_radio
}
Run Code Online (Sandbox Code Playgroud)

然后,在.h中我指定function pointers:

struct tune_if_t
{
    void (*init_radio)      (void);
    void (*calibrate_radio) (void);
};

extern const struct tune_if_t tune_if;
Run Code Online (Sandbox Code Playgroud)

这允许库外的系统在function不知道编译和链接哪个无线电库的情况下调用:

int main( void )
{
    // interface calls
    tune_if.init_radio();
    tune_if.calibrate_radio();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 这有技术术语吗?我现在很难快速向另一位工程师解释.

  • 这是完成此类行为的最佳方法吗?

  • 这种方法有什么问题吗?

Owe*_*wen 5

我不知道它在C中是否有更具体的名称,但它是多态的一种形式.它与C++中的继承和虚函数有关.