为什么 g++ 会产生巨大的错误日志

Why does g++ generate huge error log?

本文关键字:错误 日志 巨大 g++ 为什么      更新时间:2023-10-16

我在某处看到这个格式错误的C++程序可以使g ++生成一个巨大的错误日志:

int main()
{
    struct x struct z<x(x(x(x(x(x(x(y,x(y><y*,x(y*w>v<y*,w,x{};
    return 0;
}

通过多次重复(x,错误日志可能会增长到>1GB。因此,该程序可用于耗尽受害者的系统资源。虽然这个问题可以通过--fmax-error来解决,但我很好奇 g++ 在编译过程中发生了什么,让它吐出这样的日志。

我无法真正回答发生了什么特定的事情,以至于错误数不胜数,但请记住,C++可能有人类已知的最复杂的语法。

编译器的部分工作是通知用户特定输入出了什么问题,它无效(或者在警告的情况下,是好的)C++。

当您递归具有歧义时,您可能会获得错误消息的指数增长,因为编译器会通知您它可能意味着的一组内容。假设?可以表示AB???可以是AAAAABABAABBBAABABBBABBB中的任何一个。

编译器只知道当你用--fmax-error告诉它时,第 100000000 次近似重复对来说并不重要。