将地址转换为函数:使用“void * void”

时间:2014-01-12 22:35:25

标签: c++ c

我遇到了一个函数调用

    // call the entry point from the ELF header
    // note: does not return!
    ((void (*)(void)) (ELFHDR->e_entry & 0xFFFFFF))();

ELFHDR-> e_entry是一个函数指针。我认为((void (*)(void))是返回类型。但我不确定类型void * void是什么。

是否有规则告诉这种类型?

谢谢!

3 个答案:

答案 0 :(得分:3)

void (*)(void)

是指向没有参数的函数的类型指针,它不返回任何值。

例如:

void foo(void)
{
}

void (*p)(void) = foo;  // p is of type void (*)(void)

答案 1 :(得分:2)

你说“我认为((void (*)(void))是返回类型” - 它不是。它正在施放表达式

(ELFHDR->e_entry & 0xFFFFFF)

是一个指向不带参数且不返回任何内容的函数的指针。

语句的最后一个()通过该指针调用该函数。

答案 2 :(得分:1)

您想要的工具是cdecl,它将C类型转换为英语。在这种情况下,它翻译:

(void (*)(void))

成:

cast unknown_name into pointer to function (void) returning void