使用 GCC,我可以在每个功能的基础上禁用 -Wframe-larger-than 吗?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于使用 GCC,我可以在每个功能的基础上禁用 -Wframe-larger-than 吗?的主要内容,如果未能解决你的问题,请参考以下文章

在每个文件(不是文件类型)的基础上禁用自动填充模式

可以在每个会话的基础上以编程方式启用/禁用 DPI 缩放吗?

使用 AVR Studio 中的自动完成功能使用 avr-gcc 对 C 进行编码

如何禁用关于#warning 指令是 GCC 扩展的 GCC 警告?

在 GCC 的函数中禁用特定循环的自动矢量化

如何在 gcc 中禁用编译器优化?