我对C很新,我正在读这篇文章: Killing Quicksort
它说:
对于那些在家里玩的人,请注意:如果C库认为计算机有足够的可用内存,则GNU C库qsort函数实际上是mergesort;强制快速排序,调用未声明的_quicksort函数并使用gcc -static进行编译。
关于compiller选项,我使用CMake并将cmake标志设置为:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -static")
但我不知道如何调用未声明的 _quicksort 。
有没有人有这方面的经验?
修正:
我刚刚以这种方式声明了像@recycler建议的_quicksort函数:
void _quicksort(void *__base, size_t __nmemb, size_t __size,
__compar_fn_t __compar);
现在似乎表现得像一个快速排序。 我是C的初学者,对我而言,这似乎很神奇,但无论如何,我认为自己现在很满意。
答案 0 :(得分:2)
你可以声明函数" _quicksort"在你的c测试代码中。这应该与qsort相同。 现在你必须将它与c-lib链接,这应该由链接器自动完成。 如果导出函数_quicksort,则可以使用它,链接器会将其链接到二进制文件。 如果未导出,则会出错。
这是快速而肮脏的选择。 您还可以阅读GNU C lib的源代码。也许还有另一种选择。