gpt4 book ai didi

c - 从不兼容的指针类型进行赋值 [-Werror]

转载 作者:行者123 更新时间:2023-11-30 18:00:21 27 4
gpt4 key购买 nike

我正在尝试将我的工作代码从 Mac OS X 移植到 GNU/Linux。
我使用的是 qsort_r,其原型(prototype)在 FreeBSD 和 GNU/Linux 上是不同的。

因此,我将我的 qsort_r 特定调用包装在平台特定宏周围现在,当我编译时,代码在 Mac OS X 上编译并运行良好,但在 GNU/Linux 上出现错误

我似乎找不到问题所在。也许另一双眼睛可能会有所帮助。

错误-

auto-assign.c: In function ‘get_gtype’:
auto-assign.c:1669:19: error: assignment from incompatible pointer type [-Werror]
auto-assign.c:1677:19: error: assignment from incompatible pointer type [-Werror]
auto-assign.c:1685:19: error: assignment from incompatible pointer type [-Werror]
auto-assign.c:1693:19: error: assignment from incompatible pointer type [-Werror]
<小时/>

auto_assign.c -

switch (op) {
1668 case RULE_S2_8:
1669 gtype->qsort_comp = comp_uint8_t; # -Werror
1675 break;
1676 case RULE_S2_16:
1677 gtype->qsort_comp = comp_uint16_t; # -Werror
1683 break;
1684 case RULE_S2_32:
1685 gtype->qsort_comp = comp_uint32_t; # -Werror
1691 break;
1692 case RULE_S2_64:
1693 gtype->qsort_comp = comp_uint64_t; # -Werror
1699 break;
1700 }
<小时/>

gtype-

struct grouper_type {
71 #if defined(__APPLE__) || defined(__FreeBSD__)··
72 int (*qsort_comp)(
73 void* thunk,
74 const void* e1,
75 const void* e2
76 );
77 #elif defined(__linux)
78 int (*qsort_comp)(
79 const void* e1,
80 const void* e2,
81 void* thunk
82 );
83 #endif
...

-> gcc -E 确实返回了两个平台上的写入 qsort_comp

<小时/>

comp_* -

532 #if defined(__APPLE__) || defined(__FreeBSD__)
533 #define comp(size) \
534 int comp_##size(void *thunk, const void *e1, const void *e2) {\
535 size x, y; \
536 x = *(size *)(**(char ***)e1+*(size_t *)thunk); \
537 y = *(size *)(**(char ***)e2+*(size_t *)thunk); \
538 return (x > y) - (y > x); \
539 }
540 #elif defined(__linux)
541 #define comp(size) \
542 int comp_##size(const void *e1, const void *e2, void *thunk) {\
543 size x, y; \
544 x = *(size *)(**(char ***)e1+*(size_t *)thunk); \
545 y = *(size *)(**(char ***)e2+*(size_t *)thunk); \
546 return (x > y) - (y > x); \
547 }
548 #endif
549
550 comp(uint8_t);
551 comp(uint16_t);
552 comp(uint32_t);
553 comp(uint64_t);
...

-> gcc -E 确实在两个平台上都返回了 write comp_*

最佳答案

您正在删除宏中的 const 限定符。

关于c - 从不兼容的指针类型进行赋值 [-Werror],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10554231/

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