【问题标题】:With GCC, can I disable -Wframe-larger-than on a per-function basis?使用 GCC,我可以在每个功能的基础上禁用 -Wframe-larger-than 吗?
【发布时间】:2011-01-11 17:51:14
【问题描述】:

使用 GCC,是否可以指定一组不受 -Wframe-larger-than 影响的函数? (例如,main。)

【问题讨论】:

    标签: c++ c gcc compiler-warnings


    【解决方案1】:

    GCC 为此为您提供了编译指示:

    http://gcc.gnu.org/onlinedocs/gcc-4.5.2/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas

    目前它不会完全按照您的意愿执行,因为它似乎是在逐个文件的基础上执行此操作,但在 gcc 的下一个版本(4.6)中,它看起来好像是上下文感知的:

    http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas

    【讨论】:

    • 它可以在一个函数一个函数的基础上工作。来自文档:“GCC 跟踪每个 pragma 的位置,并根据源文件中该点的状态发出诊断。因此,出现在一行之后的 pragma 不会影响由该行引起的诊断。”跨度>
    • @Carl:实际上,这些文档是针对当前开发版本(4.6)的,所以它不适用于 4.5,如果您查看我提供的链接。
    • 哦,好的。实际上,我没有在该文档上看到任何版本控制。感谢您的澄清。
    • 谢谢,这成功了(特别是#pragma GCC diagnostic ignored "-Wframe-larger-than=")。虽然现在我更想要 GCC 4.6。
    【解决方案2】:

    这有点旧,但我在寻找相同的答案时遇到了它,所以我想我会发布我的解决方案(通过反复试验找到):

    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wframe-larger-than="
    
    void func() 
    { int x[2000] = {}; printf("%d",x[1]); }    
    
    #pragma GCC diagnostic pop
    

    似乎有效。出于某种原因,尝试使用 diagnostic warning 不起作用。似乎无法更改生成警告的堆栈大小。此外,您需要在末尾添加 =。也许下一个人会发现这个并节省一些时间:)。这是 4.6.2(在 ARM 交叉编译器上)。

    约翰

    【讨论】:

      【解决方案3】:

      您可以使用GCC diagnostic pragma

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-07
        • 2013-04-25
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-28
        相关资源
        最近更新 更多