c++ - 宏 ((void(*)())0)() 是什么意思?

标签 c++ c macros

以下宏的结果很清楚:

#define CRASH() do {\
  *(int *)(uintptr_t)0xbbadbeef = 0;\
  ((void(*)())0)();\
} while (false)

我的问题是,这条线是什么

((void(*)())0)();

分解为,英文?例如,“这是一个返回指向...的指针的函数。”

最佳答案

它看起来像是将 0 转换为函数指针(其签名不带参数且返回类型为 void),然后调用它。

(     (            void(*)()                  ) 0       )      ();
  /* cast..*/ /* fn pointer signature */  /*..cast 0 */  /* invocation */

这是另一种说法,它正在尝试调用(调用)预期位于内存中地址 0x00000000 处的函数 - 这肯定是无效地址。

关于c++ - 宏 ((void(*)())0)() 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9825255/

相关文章:

c - 如何通过 C 程序打印 Extended ASCII 字符 127 到 160?

C++宏展开、调试

c++ - 带有来自第一个宏的参数的宏到另一个宏

c++选择排序在特定情况下不起作用

c - 将程序分成多个文件 - 出现错误 "redefinition; different basic types"

c++ - 如何获取程序中特定字符串占用的字节数?

C- 收割子进程和背景

c++ - 宏中以 # 标记开头的参数

c++ - 参数包和移动语义

c++ - 如何在 c++ "XY:56:21AM"中从这个字符串中分离出 HH、MM、SS 和 merdian?以下程序出现段错误