下面给出了一个开源项目中的一小段代码,
#ifndef __cplusplustypedef enum BoolenTag
{
false , true
} bool ;
#endif#define CRASH() do { \
(( void (*)())0)();
\
} while ( false )int main()
{
CRASH();
return 0;
}
【CRASH()宏–用法解释】你能解释上面的代码吗?
很简单, 下面给出逐步的方法,
该声明while(假)仅用于测试目的。考虑以下操作,
((void(*)())0)();
可以通过以下方式实现,
0;
/* literal zero */(0);
( ()0 );
/* 0 being casted to some type */( (*) 0 );
/* 0 casted some pointer type */( (*)() 0 );
/* 0 casted as pointer to some function */( void (*)(void) 0 );
/* Interpret 0 as address of function
taking nothing and returning nothing */( void (*)(void) 0 )();
/* Invoke the function */
因此, 给定的代码正在调用其代码存储在零位置的函数, 换句话说, 试图执行存储在零位置的指令。在具有内存保护(MMU)的系统上, 操作系统将引发异常(分段错误), 而在没有此类保护的系统(小型嵌入式系统)上, 操作系统将执行并且错误将进一步传播。
—文基。如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- 打印数组A[]中的所有字符串,并将数组B[]中的所有字符串作为子序列
- 如何创建和访问Python包(详细示例)
- 创建具有O和X的交替矩形的矩阵
- 使用tkinter在Python中创建是/否消息框
- 自激活W10纯净版 雨林木风64位WIN8.1专业版推荐
- 雨林木风纯净专业版Win8.1系统推荐
- 免激活W8 Win8之家Win8.1 64位专业版推荐下载
- xtzj w8专业版 破解版Win8 64位纯净版更新及下载
- 雨林木风Win8纯净版64位破解版下载