我有一個函數(特別是系統調用),它返回需要調用的函數的結果。C函數指針賦值警告
代碼看起來像這樣
int32_t (*func_ptr)(int32_t fd, void * buf, int32_t nbytes);
func_ptr = (curr_proc->fds[fd].operations_pointer[READ]);
在那裏我們curr_proc
只是一個結構。該結構持有一個文件描述符數組(fds
),它包含一個指向相應函數的指針(operations_pointer
)。存在着適用於在我們的系統中每個類型的設備的功能的陣列,且此陣列看起來像這樣:
uint32_t * rtc_ops_table[4] = {(uint32_t *) rtc_open, (uint32_t *) rtc_read, (uint32_t *) rtc_write, (uint32_t *) rtc_close};
uint32_t * dir_ops_table[4] = {(uint32_t *) dir_open, (uint32_t *) dir_read, (uint32_t *) dir_write, (uint32_t *) dir_close};
因此,當一個程序調用讀取時,對應的函數指針被加載到func_ptr
然後返回及其相應的論點。
我遇到的問題是,在我給你func_ptr
行,我從GCC這樣的警告:
warning: assignment makes pointer from integer without a cast
我曾嘗試過各種鑄件,如(uint32_t *)
,(uint32_t)
,(int32_t)
,等我也有試圖分配功能指針,如:
func_ptr = &(curr_proc->fds[fd].operations_pointer[READ]);
但無濟於事。
我該如何解決此警告?
編輯:
這是結構的curr_prc
typedef struct {
file_array fds[8];
uint8_t file_names[8][32];
uint8_t proc_num;
...
} pcb_t;
而對於FAS的結構:
typedef struct file_array{
uint32_t * operations_pointer;
inode_t * inode;
uint32_t file_position;
uint32_t flags;
} file_array;
如何呈現'curr_proc'類型的聲明?在不知道實際涉及的類型的情況下清理類型問題是相當困難的。 –
也是'curr_proc-> fds'元素類型的聲明。 –
@JohnBollinger更新 –