gpt4 book ai didi

将指针分配给函数时从不同大小警告的整数转换为指针

转载 作者:太空宇宙 更新时间:2023-11-04 03:26:07 24 4
gpt4 key购买 nike

为什么在将匿名函数分配给指向我的结构中的函数字段的指针时会收到此警告?

这是我的结构:

typedef struct list_node_t  {...} ListNode;

typedef struct list_t {
ListNode* head;
ListNode* current;
...
//pointer to function fields
int (*hasNext)();
...
}List;

这里我为 hasNext 分配了一个匿名函数。它会导致警告。

List* makeNewList( ){
List* list = (List*)malloc(sizeof(List));
list->head = list->tail = NULL;
list->current = list->head;
list->hasNext = (int (*)(void)) (list->current==list->tail? 0:1);
return list;
}

用 gcc -c -Wall list.c 编译并响应此消息:

list.c: In function ‘makeNewList’:
list.c:35:21: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
list->hasNext = (int (*)(void)) (list->current==list->tail? 0:1);

为什么?我希望 list->hasNext 是指向返回 int 的函数的指针,而不是标量 int。我做错了什么?

最佳答案

为什么你认为 C 有匿名函数,有那种特殊的语法?

您需要踏踏实实地定义函数:

static int list_has_next(const List *list)
{
return list->current == list->tail;
}

该函数(当然)也必须接受一个参数,C 中没有隐式参数。您需要更新结构中的函数指针以变得兼容:

int (*has_next)(const List *list);

此外,stop casting the return value of malloc() .

关于将指针分配给函数时从不同大小警告的整数转换为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41038707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com