函数指针在常量结构中

时间:2014-02-26 10:13:53

标签: c

我正在使用其他人编写的驱动程序。 要访问驱动程序函数,我必须使用如下所示的函数访问结构:(在头文件中定义,例如, driver.h

typedef struct _driver {
  void (*init) (void);           // init is supposed to point to _init
} const driver;                  // problem here with **const**

----------------------------------------------------------------------

void _init (void) {              // defined in another file, say, driver.c
  // init code 
}

如何将 init 指向 _init

如果驱动程序不是 const

,则以下代码有效
driver dr;
dr.init = &_init;                // modifying directly 
((driver*)(&dr))->init = &_init; // modifying through a pointer

根据文档,驱动程序应该按如下方式使用:

driver dr;
driver *pdr = &dr;
pdr->init();  

为了使此代码有效, dr.init 必须指向 _init ,但我无法在代码中的任何位置找到它。 任何输入都非常感谢。

致以最诚挚的问候,

塞吉

2 个答案:

答案 0 :(得分:0)

使用初始化程序,例如

driver dr = { _init };

答案 1 :(得分:0)

rmartinjak的回答是正确的,但如果您启用了gcc扩展程序或使用了C99及更高版本,则可以use designated initializers。由于你的驱动程序结构可能会有更多的成员,这种方式可能最终会更清晰。

driver dr = {
    .init = _init,
    /* .member = value, */
};