将地址强制转换为函数:使用 "void * void "
Casting an address to a function: using "void * void "
我遇到了一个函数调用
// 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
是什么类型。
有没有规则来分辨这种类型?
谢谢!
void (*)(void)
是指向不带参数且不返回任何值的函数的类型指针。
例如:
void foo(void)
{
}
void (*p)(void) = foo; // p is of type void (*)(void)
你说"我认为((void (*)(void))
是返回类型" - 不是。 它正在投射表达式
(ELFHDR->e_entry & 0xFFFFFF)
成为指向不带参数且不返回任何内容的函数的指针。
语句的最后一个()
通过该指针调用函数。
你想要的工具是cdecl,它将C类型翻译成英语。在这种情况下,它翻译为:
(void (*)(void))
到:
cast unknown_name into pointer to function (void) returning void
相关文章:
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 我应该使用什么来代替void作为变体中的替代类型之一
- 为什么我在使用void函数时得到错误代码C2276
- 在 void 函数中使用 #include 变量C++
- 使用运算符调用 void 函数时出错<set>
- 如何在C++中使用 Void 而不会收到有关参数的错误
- 在"template"和函数声明之间使用:template<typename trait> using tr = base_trait<trait> void fn(tr::t
- <char> 使用 Vulkan 映射内存时如何使用 std::vector 而不是 void**?
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- 不能在 if 语句 - c++ 中使用 void func 直接将字符串转换为大写
- 如何在C++中使用 void* 在指针作为对方法的引用传递时保存uint32_t的值
- 定义一个 void f(void) 函数,但使用来自同一范围的变量?
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- 使用SFINAE来检测void返回类型函数的存在
- 使用boost void分配器是一种糟糕的做法吗
- 在c++std::函数的上下文中无效使用void表达式
- 如何在 Arduino 延迟期间在 void loop() 中使用 serial.available()?
- 如何使用 void 函数从类创建数组
- 对 C++ 中的特定标头使用 extern C 关键字是否允许从 void* 转换为 char*?
- <void><void>使用 g++ 4.8.3 时从"回调::func*"转换为非标量类型"回调"请求错误?