我正在尝试解读sqlite3.c文件中的这个声明。
这似乎是在声明一个函数,因为随后有这个内容。
然后似乎是对该函数的调用。
但我无法理解这个声明。我已经把我无法理解的部分标出了。
我在想为什么声明不像这样。
我预计可能已经有类似的问题被提出,但是搜索类似于
SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *, void *, const char *))(void);
这似乎是在声明一个函数,因为随后有这个内容。
SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *pVfs, void *pHdle, const char *zSym))(void){
return pVfs->xDlSym(pVfs, pHdle, zSym);
}
然后似乎是对该函数的调用。
xInit = (sqlite3_loadext_entry)sqlite3OsDlSym(pVfs, handle, zEntry);
and
xInit = (sqlite3_loadext_entry)sqlite3OsDlSym(pVfs, handle, zEntry);
但我无法理解这个声明。我已经把我无法理解的部分标出了。
SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *, void *, const char *))(void);
^ ^^^^^^^
我在想为什么声明不像这样。
SQLITE_PRIVATE void *sqlite3OsDlSym(sqlite3_vfs *, void *, const char *);
我预计可能已经有类似的问题被提出,但是搜索类似于
(
、)
和 void
的术语并没有什么进展。所以,如果这是一个重复的问题,我很乐意将其关闭。
sqlite3_vfs
。如果我只是用int
替换sqlite3_vfs
,那么我就可以得到答案了。 - David Heffernansqlite3OsDlSym
返回“指向函数(无返回值)的指针”,但实际返回的函数指针具有不同的原型,因此需要进行(sqlite3_loadext_entry)
强制转换。 - David HeffernanSQLITE_PRIVATE
的实际情况,它可能适用于被声明的函数而不是返回类型(例如,如果它是static
的宏)。 - M.MSQLITE_PRIVATE
扩展为static
,我相信。 - David Heffernan