以下宏的结果很清楚:
#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的内存中的函数 - 这被保证是一个无效的地址.