【问题标题】:Where to find a full list of gcc warnings and errors?在哪里可以找到 gcc 警告和错误的完整列表?
【发布时间】:2010-06-26 12:34:27
【问题描述】:

有时我需要使用 gcc 进行跨平台工作,有时 gcc 的警告真的让我很开心。例如:

#pragma once 在主文件中

这是非常有用的警告,但我真的不知道 gcc 术语中的“主文件”是什么以及为什么它不能包含 #pragma once :)。那么,是否存在任何涵盖所有 gcc 警告和错误(主要是警告,错误是微不足道的)以及一些 cmets 的文档?

【问题讨论】:

  • 我也需要这个,我用gcc填了一个bug:gcc.gnu.org/bugzilla/show_bug.cgi?id=89808

标签: gcc


【解决方案1】:

“#pragma once”的目的是防止重新包含标头。如果你在源文件(通常是'.c'文件)中有它,你不会读两次(通常 - 我知道一个重新包含自己的源文件[我不喜欢它];它不使用或不想要#pragma once,不过!)。因此,在这种情况下,“主文件”是列在命令行上的文件,而不是标题。

关于问题的主题 - GCC 手册似乎没有完整的列表。不知道真的有没有。

【讨论】:

  • 但它在标题中。一个预编译的头文件。
  • 一个预编译的头文件被构建,所以在构建它时它是一个“主文件”——#pragma once 大概只有在预处理器进行包含时才有意义,而不是预编译的头文件。
  • @hobbs:是的。 gcc -c so.h 在将标头编译为预编译标头时产生 so.h:1:9: warning: #pragma once in main file。我不确定是否有抑制该警告的好方法。
  • 我不知道它有多大的代表性,但是一个包含 #pragma once 和 static int abc = ABC; 的 2 行标题 (so.h) 扩展为一个 2MB 的预编译标题 (so.h.gch ) 在带有 GCC 4.2.1 的 Mac Mini 上。
  • @hobbs 似乎最好的方法仍然是使用普通的包含警卫。
猜你喜欢
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
相关资源
最近更新 更多