Tôi đang cố gắng để giải mã tuyên bố này từ sqlite3.cLàm cách nào để diễn giải tuyên bố này dường như là khai báo hàm, nhưng không phù hợp với khuôn mẫu thông thường?
SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *, void *, const char *))(void);
Nó có vẻ như nó được định nghĩa một hàm vì sau đó có này
SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *pVfs, void *pHdle, const char *zSym))(void){
return pVfs->xDlSym(pVfs, pHdle, zSym);
}
và sau đó những gì xuất hiện được cuộc gọi đến chức năng
xInit = (sqlite3_loadext_entry)sqlite3OsDlSym(pVfs, handle, zEntry);
và
xInit = (sqlite3_loadext_entry)sqlite3OsDlSym(pVfs, handle, zEntry);
Nhưng tôi không thể hiểu được tuyên bố. Tôi đã nêu bật những gì tôi không thể hiểu
SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *, void *, const char *))(void);
^ ^^^^^^^
Tôi đang tự hỏi lý do tại sao việc kê khai không giống như vậy
SQLITE_PRIVATE void *sqlite3OsDlSym(sqlite3_vfs *, void *, const char *);
Tôi hy vọng rằng có cũng có thể là một câu hỏi tương tự đã hỏi nhưng tìm kiếm thuật ngữ như (
, )
và void
không thực sự đến bất kỳ đâu. Vì vậy, nếu đây là một bản dupe, tôi sẽ rất vui vì nó được đóng lại như vậy.
Cảm ơn, tôi đã cố gắng cdecl.org, nhưng không thể có được nó để cho tôi bất cứ điều gì khác hơn là "lỗi cú pháp". Tôi có thể thấy bây giờ đó là vì nó không nhận ra 'sqlite3_vfs'. Nếu tôi chỉ thay thế 'sqlite3_vfs' bằng' int' thì tôi sẽ có câu trả lời. –
Và điều khác khiến tôi hiểu rằng tôi cho rằng mặc dù 'sqlite3OsDlSym' trả về" con trỏ tới hàm (void) trả về void ", con trỏ hàm thực tế trả về có nguyên mẫu khác nhau, do đó' 'sqlite3_loadext_entry)' cast. –
Tùy thuộc vào những gì 'SQLITE_PRIVATE' thực sự là, nó có thể áp dụng cho hàm được khai báo thay vì loại trả về (ví dụ: nếu đó là macro cho' static') –