我有一个函数(特别是系统调用),它返回需要调用的函数的结果。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更新 –