我如何了解我的库是什么标准以及 gcc 在我的计算机中编译的标准是什么?

How can I understand what standard my libraries are and to what standard gcc compiles in my computer?

这是我的终端:

Korays-MacBook-Pro:~ koraytugay$ gcc --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.3.0
Thread model: posix

据我所知有3个C标准,ANSI C、C99和C11。

我怎么知道我有哪个库以及我的编译器支持什么?

Clang 支持所有三个标准以及更多标准(GCC 的“gnu99”,...)。您可以在用于选择它们的命令行选项 -stddocumentation 中找到。

http://clang.llvm.org/docs/UsersManual.html#id39

使用-std命令行标志,例如-std=c11-std=c++11 到 select 标准。

您必须找到适用于您的编译器 and/or 操作系统的文档,但并不总是清楚地记录下来。


Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)

这对应于Xcode 6.3。

https://developer.apple.com/library/mac/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html

此外,LLVM 3.5 版本中的所有内容都应包含在该版本的编译器中:编译器“基于 llvm 3.6 svn 分支,该分支存在于 LLVM.org 的 3.6 版本之前(有点令人困惑,我知道)。

http://clang.llvm.org/cxx_status.html

但是,他们没有类似的方便的 C 版本支持页面。

http://llvm.org/releases/3.5.0/tools/clang/docs/UsersManual.html#differences-between-various-standard-modes

事实上,在我看来文档甚至没有准确反映 clang 3.5 的 C11 支持。


所以基本上,如果文档没有明确涵盖它,您只需要熟悉编译器即可。

Xcode 6.3 支持 C89/C90、C94、C99 和 C11 的 C 语言特性。我相信 OS X 提供对 C99 的完整库支持。 OS X 不包含 C11 标准库的实现,但是编译器可能会提供一些 C11 头文件。然而,<threads.h> 不是。