【发布时间】:2018-05-16 03:11:29
【问题描述】:
我一直在研究 qsort 的不同实现,在此处 (https://code.woboq.org/userspace/glibc/stdlib/qsort.c.html) 找到的源代码中有一行我不明白。它看起来像一个函数指针声明。我会很感激任何帮助。我已经包含了尽可能多的代码(带有注释的行),我认为可以回答这个问题。如果没有请告诉我,谢谢。
typedef struct
{
char *lo;
char *hi;
} stack_node;
void _quicksort (void *const pbase, size_t total_elems, size_t size, cmp_t cmp, void *arg)
{
char *base_ptr = (char *) pbase;
const size_t max_thresh = 4 * size;
if (total_elems == 0)
return;
if (total_elems > 4)
{
char *lo = base_ptr;
char *hi = &lo[size * (total_elems - 1)];
stack_node stack[(8 * sizeof(size_t))];
stack_node *top = stack;
/* Line below is a function pointer declaration? Initializes struct? */
((void) ((top->lo = (((void*)0))), (top->hi = (((void*)0))), ++top));
while ((stack < top))
{
char *left_ptr;
char *right_ptr;
char *mid = lo + size * ((hi - lo) / size >> 1);
...代码继续
【问题讨论】:
-
您的链接中的代码没有这样的行。它只是说
PUSH (NULL, NULL);。你是从哪里得到这个版本的,你为什么还要以这种形式查看它? -
以上代码为后期预处理