【问题标题】:Changing clang to compile in C11 or higher?将 clang 更改为在 C11 或更高版本中编译?
【发布时间】:2020-06-02 16:44:36
【问题描述】:

我正在关注学习 C 的教程。我目前正在使用带有 clang 11.0.3 的 Mac。默认情况下它在 C99 中(我收到错误:警告:函数 'of' 的隐式声明在 C99 中无效 [-Wimplicit-function-declaration]。) 我正在使用 xcode 11.5。

如何将 clang 的默认值更新/更改为 C11 或更高版本?

【问题讨论】:

  • -std=c11-std=gnu11
  • 这是page of flags
  • joek,你想改变一些东西,所以在没有标志的情况下调用编译器会导致 C11 还是传入一个选择标志足够好?
  • 正如 Gilles 所说,这是一个XY problem。 C标准的选择不是问题;问题出在你的代码中,在 C11 下它仍然是非法的(和不正确的)。如果of真的是函数,则需要声明;这也可能是一个错误。如果您实际上可以发布有问题的代码,人们可以帮助您找出哪个。
  • 是的,我已经意识到 1) 我从换行符处添加的连字符复制并粘贴了电子书,将“sizeof”转换为“size-of”。 2) 这本书使用了 %d,但是用 %lu 替换它们已经奏效了。

标签: c terminal clang


【解决方案1】:

您可以在系统上使用man clangonline on the Clang websitehttps://clang.org →“入门”→“用户手册”链接在左侧)查找文档。

clang 支持 -std 选项,它改变了 clang 使用的语言模式。 C 支持的模式是 c89、gnu89、c99、gnu99、c11、gnu11、c17、gnu17、c2x、gnu2x,以及这些模式的各种别名。如果没有指定 -std 选项,clang 默认为 gnu17 模式。

请注意,由于您将 C99 视为语言版本,因此您的 IDE 可能已经传递了 -std 选项。我不知道在哪里可以控制 Xcode 中的编译器选项,但 Setting C compile flags in xcode 可能会有所帮助。

Clang 文档并不总是完整或清晰的。 Clang 的许多特性模仿了GCC,而且 GCC 通常有更好的文档。 C dialect options in the GCC manual 部分包含有关 -std 及其值的更多信息。您需要小心,因为 Clang 并不总是像 GCC 一样工作,但 GCC 文档通常很有帮助,只要您记住它可能并不总是适用于 Clang。

无论如何,这些都对您没有帮助,因为从 C99 切换到 C11 并不能解决这个特定的错误。隐式函数声明是 C89 中已弃用的功能,在 C99 中无效,of 不是 C11 中的新关键字,因此您的代码可能是错误样式的 C89 或更可能有错字,of 不应该是函数名。

【讨论】:

  • 不错的答案,但我会把最后一段放在第一位。
  • @NateEldredge 最后一段将帮助最初的提问者,而不是其他很多人。我的其余答案将对未来的访客有所帮助。我认为未来访问者的预期数量超过 1(这是 Stack Exchange 背后的一个主要前提),所以我为每个人写作,而不仅仅是为最初的提问者。
猜你喜欢
  • 2012-01-13
  • 2023-03-28
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多