调用qsort()函数

问题描述 投票:0回答:1

我正在编写此程序,该程序需要在表上执行qsort()。我弄完了在互联网上进行了广泛的研究,但我仍然缺少一些东西。下边是源代码的选定部分。

#define NOSLACK __attribute__((packed))

#define TABWIDTH 100                                 /* width of big table */

#define TABSIZE 100                      /* number of entries in big table */

struct ELEMEN 
   {char flags;                           /* flags pertaining to this task */
    short int tasknum;  /* number of THIS task (excluding any step number) */
    short int numpre;                   /* number of prereqs this task has */
    short int numpost;                 /* number of postreqs this task has */
    short int prereqs[0];      /* table of prereqs (omitted if numpre = 0) */
    short int postreqs[0];   /* table of postreqs (omitted if numpost = 0) */
    char fragment[TABWIDTH                    /* fragment of the descrip-  */
     - sizeof(char)                           /* tion; as much as will fit */
     - sizeof(short int) * 3];} NOSLACK;

           /* the lengths of all the above fields should total to TABWIDTH */

    struct ELEMEN bigtable[TABSIZE];

short int e35(const void*, const void*);

short int main(int argc, char* argv[])

    qsort(g.bigtable, numelem, TABWIDTH,         /* sort table using e35() */
     e35);                                         // <--- PROBLEM HERE

short int e35(const void* elem1, const void* elem2)         /* sort tasks  */
   {return(memcmp(                                          /* into se-    */
     (short int*)&((struct ELEMEN*)elem1)-> tasknum,        /* quence by   */
     (short int*)&((struct ELEMEN*)elem2)-> tasknum,        /* task number */
     sizeof(short)
     ));

问题出在对qsort()的调用中。如果最后一个参数只是e35,则会收到警告消息:warning:从不兼容的指针类型[-Wincompatible-pointer-types]

传递“ qsort”的参数4

如果我将e35更改为(e35)(const void *)(const void *)),则会得到:错误:预期'const'之前的表达式和错误:函数'e35']的参数太少

如果将其更改为错误:e35(星号)(const无效*)(const无效*))我得到:错误:')'标记之前的预期表达式标记错误:函数'e35'的参数太少,错误:预期'const'之前的表达式

我想念的是什么?我相信gcc不知道e35是函数,而不是变量或数组。

我以前使用过qsort(),但这是gcc下的第一次。以前,我在TurboC下使用过它,我所需要的只是函数名称e35。

我正在Debian Linux下使用gcc进行编译。 qsort()的目的是我稍后重复搜索该表,并希望能够更快地执行该操作。

<<

我正在编写此程序,该程序需要在表上执行qsort()。我已经在互联网上进行了广泛的研究,但仍然缺少一些东西。以下是源代码的选定部分。 #...

使用int返回。比较为short。避免减法溢出。
int e35(const void* elem1, const void* elem2) { struct ELEMEN* t1 = elem1; struct ELEMEN* t2 = elem2; return (t1->tasknum > t2->tasknum) - (t1->tasknum < t2->tasknum); }
c gcc qsort function-prototypes
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.