gpt4 book ai didi

c - 赋值使指针来自整数而不进行强制转换 (c)

转载 作者:行者123 更新时间:2023-11-30 17:30:30 26 4
gpt4 key购买 nike

我需要交换列表中的两个项目,以便在渲染时它们的顺序发生变化。我有这样的结构:

typedef struct App_Settings app_settings;
struct App_Settings
{
GList *presets;
};

typedef struct Preset preset;
struct Preset
{
char* title;
float freq;
};

app_settings settings;

我编写了一个函数来交换列表中的下一个项目:

GList *list_swap_next (GList *list, GList *l)
{
GList *tmp;

if (!l)
return list;

if (!l->next)
return list;

if (l->prev)
l->prev->next = l->next;
tmp = l->prev;
l->prev = l->next;
l->next->prev = tmp;
if (l->next->next)
l->next->next->prev = l;
tmp = l->next->next;
l->next->next = l;
l->next = t;

if (list == l)
return l->prev;

return list;
}

对于 gtktreeview 中的上移项目:

void move_up_button_clicked_cb(GtkWidget *widget, gpointer data)
{
GList *l;
preset *ps;
int *row;
.....................................
row = gtk_tree_path_get_indices(path);

ps = g_list_nth_data(settings.presets, *row);
g_assert(ps);

l = g_list_find (settings.presets, (gpointer)ps);
settings.presets = list_swap_next (settings.presets, l);
.....................................

编译时收到此警告:

    warning: assignment makes pointer from integer without a cast [enabled by default]
settings.presets = list_swap_next (settings.presets, l);
^

当我使用 GINT_TO_POINTER 宏来转换 list_swap_next

settings.presets = GINT_TO_POINTER (list_swap_next (settings.presets, l));

编译器不再有警告输出,但不知道为什么在不使用此“技巧”的情况下会出现警告

为什么函数 GList *list_swap_next (GList *list, GList *l) 看起来返回一个 int?

最佳答案

问题可能是您分别调用 list_swap_prev()g_list_swap_prev() 的函数没有原型(prototype),因此编译器假定该函数返回 int

第一步是确保命名一致(是 list_swap_prev() 还是 g_list_swap_prev()?)

关于c - 赋值使指针来自整数而不进行强制转换 (c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25093487/

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