This function definition is found here.:
static void (*resolve_memcpy (void)) (void)
{
return my_memcpy; // we'll just always select this routine
}
我不明白这意味着什么。
答案 0 :(得分:5)
resolve_memcpy是一个不带参数的函数,返回一个不带参数的函数指针,返回void。
编辑:这是一个链接,您可以在其中详细了解此类语法:http://unixwiz.net/techtips/reading-cdecl.html
答案 1 :(得分: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 :(得分:2)
可以使用cdecl查找:
将resolve_memcpy声明为static function(void)返回指向function(void)返回void的指针
答案 3 :(得分:0)
它基本上返回一个函数指针,大概是你应该使用的,而不是memcpy
。
// memcpy(...)
resolve_memcpy()(...) // Use this instead.