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

MM.*_*MM. 4 c c++ macros

以下宏的结果很清楚:

#define CRASH() do {\
  *(int *)(uintptr_t)0xbbadbeef = 0;\
  ((void(*)())0)();\
} while (false)
Run Code Online (Sandbox Code Playgroud)

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

((void(*)())0)();
Run Code Online (Sandbox Code Playgroud)

用英语分解?例如,"这是一个返回指针的函数...."

Mik*_*scu 14

它看起来像是0一个函数指针(带有不带参数的签名并具有void返回类型),然后调用它.

(     (            void(*)()                  ) 0       )      ();
  /* cast..*/ /* fn pointer signature */  /*..cast 0 */  /* invocation */
Run Code Online (Sandbox Code Playgroud)

这是另一种说法,它试图调用(调用)一个预期位于地址0x00000000的内存中的函数 - 这被保证是一个无效的地址.