我正在寻找一种方法来检测或减轻C源,当进行预处理时,扩展成巨大的大小,以便GCC耗尽内存.
示例代码:
#include <iostream> using namespace std; int main() { #define A30 cout << "hello world"; #define A29 if (1) { A30 } else { A30 } #define A28 if (0) { A29 } else { A29 } // ... you get the idea ... #define A1 if (1) { A2 } else { A2 } #define A0 if (0) { A1 } else { A1 } A0 return 0; }
编译此程序应该生成一个巨大的,语法上正确的if-else树(适用于较小的版本;比如说,最多可以达到A10);如果执行,它会轻松打印该树中的2 ^ 30“hello world”字符串之一.但是,尝试在8GB机器上进行编译会导致无响应的行为(稍后)会显示以下错误:
internal compiler error: Segmentation fault A0 ^
在上述情况下,是否可以使用GCC 4.9.x来限制预处理器扩展,否则可以避免使用这样的程序崩溃?