我正在使用其他人编写的驱动程序。 要访问驱动程序函数,我必须使用如下所示的函数访问结构:(在头文件中定义,例如, 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 ,但我无法在代码中的任何位置找到它。 任何输入都非常感谢。
致以最诚挚的问候,
塞吉
答案 0 :(得分:0)
使用初始化程序,例如
driver dr = { _init };
答案 1 :(得分:0)
rmartinjak的回答是正确的,但如果您启用了gcc扩展程序或使用了C99及更高版本,则可以use designated initializers。由于你的驱动程序结构可能会有更多的成员,这种方式可能最终会更清晰。
driver dr = {
.init = _init,
/* .member = value, */
};