【问题标题】:Clang: Where -Wall option is defined?Clang: -Wall 选项在哪里定义?
【发布时间】:2016-11-25 21:27:30
【问题描述】:

我正在阅读Learn C The Hard Way book,练习 2。 练习中有这样的 Makefile (reference to GitHub repo):

CFLAGS=-Wall -g

all: ex1

clean:
    rm -f ex1

我检查了man cc 以找到-Wall 选项定义,但我找不到它(link to clang documentation)。但是,我在gcc documentation 中找到了-Wall 选项。

  • 第一季度。为什么我可以将-Wall 选项传递给clang,即使它没有在clang 中定义?

  • 第二季度。这里clang和gcc是什么关系?


我的开发环境:macOS Sierra 10.12.1,安装了Xcode 8.1。

【问题讨论】:

  • 一般来说,如果 GCC 支持该选项,clang 也支持。 clang 有一些 GCC 没有的选项(例如-Weverything)。祝代码顺利通过-Weverything;这不是不可能的,但有些警告在一般情况下确实不是很有帮助(例如,一个警告测试标准定义的宏的无可挑剔的代码;另一个分析 cmets(!) 的文本并决定是否可以 -我使用-Wno-padded -Wno-vla -Wno-reserved-id-macro -Wno-documentation-unknown-command-Weverything)。
  • @nos,在您链接到的那个页面上,在“控制错误和警告消息的选项”下,有一个指向诊断参考的链接,其中详细说明了所有可能的标志,包括 -Wall .
  • @Keita,如果我提供了您正在寻找的文档,请随时将答案标记为已接受的解决方案,以便其他人知道该问题有适合提问者的解决方案。

标签: c macos gcc makefile clang


【解决方案1】:

-Wall 在 Clang 中定义。有关其诊断消息的参考(包括-Wall),请参阅http://clang.llvm.org/docs/DiagnosticsReference.html

-Wall

此标志控制的某些诊断由 默认。

控制-Wmost-Wparentheses-Wswitch-Wswitch-bool

您可以单击其他标志以深入了解所有已选择的选项。

我发现 Clang 的文档对于我用过的所有东西来说都是完整的,尽管我当然还没有接近用尽 Clang 的功能。

gcccc 的共同点多于不同点,LLVM 项目在这里做了一个相当客观的比较:http://clang.llvm.org/comparison.html

【讨论】:

  • 感谢您的回答以及指向诊断标志页面的直接链接。这就是我想检查的!
【解决方案2】:

clang 是 LLVM 项目的一部分。它完全独立于 GCC(它是 GNU 项目的一部分);他们不共享任何代码。但是,它的设计目标是与 GCC兼容;它实现了几乎所有相同的命令行选项,以及几乎所有相同的 C 和 C++ 扩展。

clang 的文档与 gcc 相比非常不完整。在 clang 的文档中没有发现任何提及 -Wall 仅意味着他们还没有完成文档的那部分。

【讨论】:

  • 我希望这听起来不是不必要的煽动性(不是我的意图),但我投了反对票,因为您没有提供可从 Google 或从Clang 用户手册上的链接。我认为在声称“clang 的文档与 gcc 相比,clang 的文档非常不完整之前,您应该努力找到这一点。在 clang 的文档中没有发现任何提及 -Wall 仅意味着他们还没有完成那部分文档还没有。”
  • @GregSchmit 我说的是整个手册,我所说的关于它们的内容实际上是真实的,对于阅读过这两本书的人来说应该是不言而喻的。我承认我懒得在一些链接中进行编辑来证明这一点,如果你想为此给我投反对票,那是你的特权。
  • 如果您只想声称文档不如gcc 的那么好或完整,那很好,尽管这将是一个红鲱鱼(与问题几乎无关)。我特别提到没有提到-Wall,并假设他们只是还没有完成文档的那部分。如果您已经阅读了这两个文档(如您所建议的那样),那么您将知道编译器警告开关已全部定义。
  • @zwol 感谢您回答和解释 LLVM 的 Clang 与 GNU 的 GCC,我不清楚!
猜你喜欢
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多