gpt4 book ai didi

c - 强制转换时条件表达式中的类型不兼容

转载 作者:行者123 更新时间:2023-12-03 06:11:14 26 4
gpt4 key购买 nike

我目前正在完成 K&R 练习,但有些事情困扰着我。

我有 qsort 函数声明:

void qsort(void *v[], int left, int right,
int (*comp)(void *, void *));

根据这本书,我应该能够使用条件表达式来选择比较函数。我有两个:

int numcmp(char *s1, char *s2)

和 cstring 的

int strcmp(const char *s1, const char *s2);

调用如下:

qsort((void **)lineptr, 0, nlines - 1,
(int(*)(void *, void *))(numeric ? numcmp : strcmp));

我的 MS VS 给了我一个错误:

Error: operand types are incompatible

但是,当我这样做时:

qsort((void **)lineptr, 0, nlines - 1,
(numeric ? (int(*)(void *, void *))numcmp : (int(*)(void *, void *))strcmp));

一切都好。

这本书是错误的,还是这只是 VS 应该如何完成的想法?

最佳答案

C标准中对条件运算符的描述(6.5.15条件运算符)中写道:

3 One of the following shall hold for the second and third operands: — both operands are pointers to qualified or unqualified versions of compatible types;

兼容的函数应具有兼容的参数。

由于您的函数有指针作为参数,因此

2 For two pointer types to be compatible, both shall be identically qualified and both shall be pointers to compatible types.

但是这两个函数的参数并不完全相同。

因此编译器是正确的。

关于c - 强制转换时条件表达式中的类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28795916/

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