以下宏的结果很清楚:
#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/