gpt4 book ai didi

c - gcc 为 qsort 生成警告

转载 作者:行者123 更新时间:2023-12-02 09:01:37 25 4
gpt4 key购买 nike

我们在spatialite中有一些代码,如下所示:

static int cmp_pt_coords (const void *p1, const void *p2)
{
....
}

static gaiaGeomCollPtr auxPolygNodes (gaiaGeomCollPtr geom)
{
....
/* sorting points by coords */
qsort (sorted, count, sizeof (gaiaPointPtr), cmp_pt_coords);
....
}

这显然是简化的 - 真正的代码可以在 https://www.gaia-gis.it/fossil/libspatialite/artifact/fe1d6e12c2f98dff23f9df9372afc23f745b50df

我从 gcc(gcc 版本 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3))收到的错误是

/bin/bash ../../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I../.. -g  -Wall -Werror -fprofile-arcs -ftest-coverage -g -I../../src/headers   -fvisibility=hidden -g -Wall -Werror -fprofile-arcs -ftest-coverage -g -MT libsplite_la-spatialite.lo -MD -MP -MF .deps/libsplite_la-spatialite.Tpo -c -o libsplite_la-spatialite.lo `test -f 'spatialite.c' || echo './'`spatialite.c
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../.. -g -Wall -Werror -fprofile-arcs -ftest-coverage -g -I../../src/headers -fvisibility=hidden -g -Wall -Werror -fprofile-arcs -ftest-coverage -g -MT libsplite_la-spatialite.lo -MD -MP -MF .deps/libsplite_la-spatialite.Tpo -c spatialite.c -fPIC -DPIC -o .libs/libsplite_la-spatialite.o
spatialite.c: In function 'auxPolygNodes':
spatialite.c:17843:5: error: passing argument 4 of 'qsort' from incompatible pointer type [-Werror]
/usr/include/stdlib.h:761:13: note: expected '__compar_fn_t' but argument is of type 'int (*)(void *, void *)'
cc1: all warnings being treated as errors

我看过一些以前的帖子:

但是它们看起来并不相同(或者至少,我在这些帖子中阅读建议的方式就是我认为我们已经在这里做的)。

我可以使用以下方法解决这个问题:

    qsort (sorted, count, sizeof (gaiaPointPtr), (__compar_fn_t)cmp_pt_coords);

但是我不明白为什么这是必要的,而且我担心向其他系统的可移植性。编译器似乎从参数中省略了 const-s。

最佳答案

这个 Actor 阵容非常好。 GCC 不够聪明,无法知道 __compar_fn_t 是

int (*)(const void *, const void *)

因此它会发出警告。

但是,__compar_fn_t 不可移植——因此,如果您不想使用它进行转换,则可能应该使用适当的编译器标志让 GCC 不对此发出警告。

或者可以查看是否定义了__compar_fn_t,如果没有,则自己定义:

#ifndef __GNUC__
typedef int (*__compar_fn_t)(const void *, const void *);
#endif

关于c - gcc 为 qsort 生成警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11967222/

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