-cant中-pedantic-errors和-Werror = pedantic之间的区别

Sup*_*mum 8 gcc compiler-errors compiler-warnings

在gcc中使用-pedantic-errors和-Werror = pedantic有什么区别?

根据海湾合作委员会的文件,有一点不同:

-pedantic-错误

只要基本标准(请参阅-Wpedantic)需要诊断,在某些情况下在编译时存在未定义的行为,并且在某些其他情况下不会阻止根据标准编译有效的程序,则会发出错误.这不等同于-Werror = pedantic,因为此选项启用了错误而后者未启用,反之亦然.

-pedantic-errors包含哪些错误,但不包括-Werror = pedantic?

-Werror = pedantic包含哪些错误,但不包括-pedantic-errors?

这两种错误的任何一个例子?

小智 1

关于为什么这两个选项单独存在的一点见解,请参见gcc 文档的第 14 章:

\n
\n

当编译器没有为某个程序生成错误\n消息时,某些 ISO C 测试套件会报告失败

\n

对于某些类型的无效程序,ISO C 需要 \xe2\x80\x9cdiagnostic\xe2\x80\x9d 消息,但 GCC 定义了一个警告来算作诊断。如果 GCC 产生警告而不是错误,则 ISO C 支持是正确的。如果测试套件调用此 \xe2\x80\x9cfailure\xe2\x80\x9d,则它们应该\n使用 GCC 选项运行-pedantic-errors,这会将这些警告转为错误。

\n
\n

因此,听起来好像有一些 ISO C 规则没有明确标记为无效 C,而是标记为有效 C。这些规则会-pedantic-errors导致错误,但-Werror=pedantic实际上不会。您必须查看 ISO C 标准以获取更多信息。

\n

至于 GCC 记录的打开/关闭哪些错误,只有 1 个明确-pedantic-errors

\n
\n

-Wno-隐式函数声明

\n

(仅限 C 和 Objective-C)\n此选项控制在声明之前使用函数时的警告。此警告在 C99 和更高版本的 C 方言中默认启用,-Wall 也默认启用。该警告被 -pedantic-errors 变成错误。

\n
\n

注意:然而,似乎并非该手册的所有作者都有相同的想法。在第 2 节中,它谈到-pedantic-errors好像是一样的:

\n
\n

要获得标准所需的所有诊断,您还应该指定-pedantic(或者-pedantic-errors如果您希望它们是错误而不是警告)。

\n
\n

所以我相信您已经发现了编辑上的差异。

\n