私は、その後の呼び出しのように見えるものをこの関数宣言のように見えるが、通常の型には適合しないこの宣言をどのように解釈すればよいですか?
SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *pVfs, void *pHdle, const char *zSym))(void){
return pVfs->xDlSym(pVfs, pHdle, zSym);
}
、その後があるので、それは関数を宣言されたように思えsqlite3.c
SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *, void *, const char *))(void);
からこの宣言を解読しようとしています機能
xInit = (sqlite3_loadext_entry)sqlite3OsDlSym(pVfs, handle, zEntry);
と
xInit = (sqlite3_loadext_entry)sqlite3OsDlSym(pVfs, handle, zEntry);
しかし、私は宣言を理解できません。私は、宣言は、私がうまくすでに尋ねたが、などの用語を検索類似した問題があるかもしれないことを期待するように
SQLITE_PRIVATE void *sqlite3OsDlSym(sqlite3_vfs *, void *, const char *);
ようにされていませんなぜ私は思ったんだけど
SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *, void *, const char *))(void);
^ ^^^^^^^
を理解することはできません何を強調してきました(
、)
、void
は実際にはどこにもいません。だから、もしこれが欺瞞であれば、そのように閉じられるのはとても幸せです。
おかげで、私はcdecl.orgを試してみましたが、できませんでした"構文エラー"以外のものを私に与えるようにしてください。私はそれが 'sqlite3_vfs'を認識しなかったので、これを見ることができます。私が 'sqlite3_vfs'を' int'に置き換えたのであれば、私は答えがあったでしょう。 –
また、 'sqlite3OsDlSym'は" void(void)return to void "ポインタを返しますが、返される実際の関数ポインタは異なるプロトタイプを持ち、したがって'(sqlite3_loadext_entry) 'キャストがあります。 –
実際に 'SQLITE_PRIVATE'が何であるかによって、戻り値の型ではなく宣言されている関数に適用されます(例えば、' static'のマクロの場合) –