Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5707794
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: C/C++

2008-09-21 15:19:31

HOJ服务器拒绝服务了,问题类似于上一篇帖子:搞挂你的C++编译器中的第一种情况,就是include的层数太深了,导致ccl死在那里了。

#include __FILE__
#include __FILE__

#ifndef MAIN
#define MAIN
int main()
{
        printf("fuck: %d\n", __INCLUDE_LEVEL__);
        return 0;
}
#endif

#gcc t.c
......
2.c:1:18: #include nested too deeply
2.c:2:18: #include nested too deeply
In file included from 2.c:2,
                 from 2.c:1,
                 from 2.c:2,
......

解决的方法就是利用gcc内建的宏__INCLUDE_LEVEL__来判断是否超过了一定的阈值,超过了阈值就不再处理了。
#ifdef INCLUDE_LEVEL_LIMIT
#undef INCLUDE_LEVEL_LIMIT
#define INCLUDE_LEVEL_LIMIT 10
#endif

#ifdef INCLUDE_LEVEL_OVERFLOW
#undef INCLUDE_LEVEL_OVERFLOW
#define INCLUDE_LEVEL_OVERFLOW 1
#endif

#if __INCLUDE_LEVEL__ < INCLUDE_LEVEL_LIMIT
#define INCLUDE_LEVEL_OVERFLOW 1
#else
#define INCLUDE_LEVEL_OVERFLOW 0
#error "#include Too Deeply"
#endif

#if INCLUDE_LEVEL_OVERFLOW==1A
//添加原先的程序代码......
#endif

#gcc t.c
t.c:15:2: #error "#include Too Deeply"


阅读(4398) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~