这篇博客介绍了一种通过__COUNTER__
宏或__LINE__
宏来防止进入无限循环的方法。
该方法可以以一种透明的方式加入代码,在进行发行版编译的时候可以选择不对它进行编译。
原理
可能出现无限循环的地方,通常是一些依赖外部数据、外部脚本或者数据驱动的特定部分。由于外部数据的不可预测性,因此有必要对于无限循环的情况进行保护。
有一个实用的保护方法就是创建一个计数器,在每次循环的时候都进行+1,如果到达了某个极限的时候触发断言。
此时我们可以创建一个while_limit
宏,它与普通的while
循环差不多,唯一不同的就是有一个参数来定义循环次数的极限。当超过这个次数后,断言被触发。代码如下:
while_limit(node, 10000)
{
// Do your work
node = node->next;
}
while_limit
宏的实现
while_limit
宏的实现如下:
static bool while_assert(