这个函数定义是什么意思?

4
这个函数定义可以在这里找到。
static void (*resolve_memcpy (void)) (void)
{
    return my_memcpy; // we'll just always select this routine
}

我不理解它的含义。

4个回答

5

所以链接里写着:D。但我不理解语法。你能详细解释一下吗? - nakiya

3

以下是我阅读复杂声明的标准方法:从最左边的标识符开始,向外逐步处理,记住如果没有明确的分组,则 ()[] 的优先级高于 *

              resolve_memcpy               -- resolve_memcpy
              resolve_memcpy(void)         --  is a function taking no arguments
             *resolve_memcpy(void)         --  and returning a pointer
            (*resolve_memcpy(void)) (void) --   to a function taking no arguments
       void (*resolve_memcpy(void)) (void) --   and returning void
static void (*resolve_memcpy(void)) (void) -- and is not exported to the linker

因此,resolve_memcpy函数的返回值是指向另一个函数的指针:

void (*fptr)(void) = resolve_memcpy();
fptr(); // or (*fptr)(), if you want to be explicit

如果你想让同事发疯,你可以写下如下内容:
resolve_memcpy()(); 

这将执行由resolve_memcpy返回的函数指针所指向的函数。


2

您可以使用cdecl来查找:

将resolve_memcpy声明为返回指向函数(void)的指针的静态函数(void)


0
它基本上返回一个函数指针,你应该使用它来代替memcpy
// memcpy(...)
resolve_memcpy()(...) // Use this instead.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接