使用 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 进行编码