gpt4 book ai didi

c - 编写 typedef 函数

转载 作者:太空宇宙 更新时间:2023-11-04 05:14:05 25 4
gpt4 key购买 nike

在头文件中我有以下行:

typedef int comparator(int* left, int* right);

但是当我尝试为它编写一个函数定义时:

int comparator (int* left, int* right){
if(left<right) {
return 1;
} else if(right>left) {
return -1;
} else {
return 0;
}
}

我得到的错误是:

file.c:10: error: ‘comparator’ redeclared as different kind of symbol

该函数必须进行类型定义,因为稍后在头文件中它会在方法原型(prototype)中使用,如下所示:

struct bst_node** search(struct bst_node** root, comparator compare, void* data);

那么这个方法是如何构造的呢?

最佳答案

在你的头文件中你应该有

 int comparator(int* left, int* right);

您没有声明类型,而只是声明了一个函数。

您可以声明一个称为比较器的函数指针类型...

typedef int (*comparator)(int* left, int* right);

但是您不会创建一个名为 comparator 的函数。你只需要创建一个具有相同签名的函数

int ascending_comparator(int* left, int* right)
{
// comparison
}

然后调用

search(root, ascending_comparator, data);

此外,我觉得您不想传递 int* 而是实际的 int,或者在您的函数中您不想比较指针,而是比较每个 int 指向的值,喜欢

int comparator (int* left, int* right){
    if(*left < *right) {
        return 1;
    } else if(*right > *left) {
        return -1;
    } else {
        return 0;
    }   
}

但您可能想要比较存储整数的内存位置。

你的比较也是一样的

if(left < right) 

相同
if( right > left)

也许你想要

 int comparator (int* left, int* right){
    if(*left < *right) {
        return 1;
    } else if(*left > *right) {
        return -1;
    } else {
        return 0;
    }   
}

关于c - 编写 typedef 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14006326/

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