关于 OS X 上可供我使用的各种 C++ 编译器的许多问题

1 c++ macos xcode gcc c++11

我无法理解可供我使用的不同编译器。

我主要是用Xcode来编写和编译,在Xcode的preferences里面,C++编译的选项都有:

C++语言方言:

  • C++98[-std=c++98] 到 C++14[-std=c++14]
  • GNU++98[-std=gnu++98] 到 GNU++14[-std=gnu++14]

C++ 标准库:

  • libstdc++(GNU C++ 标准库)
  • libc++(支持 C++11 的 LLVM C++ 标准库)

    1. 有人能解释一下 ^ 到底是什么吗?

    2. 我明白(如果我错了,请纠正我),苹果不再使用 Xcode 分发 GCC 而是使用 Clang?

    3. 如果是这样,那么为什么 Xcode 可以选择 GNU C++ 标准库?GNU 不制作 GCC 吗?

    4. 当我在本地终端中运行 C++ 代码时调用什么编译器g++ filename.cpp

    5. 有没有办法确保这个g++“编译器”是最新的?

    6. g++在终端中编译和使用 Xcode有什么区别?

    7. 另外,如果我尝试使用 Clang 运行 C++ 程序会有什么不同?

    8. 我的课程要求我们通过终端上的 ssh 在部门服务器的编译器上测试我们的程序。服务器是一台 Unix 机器,我知道它的编译器是 GNU 的 GCC 编译器,我们也使用g++. 这是否意味着g++我终端中的本地也是 GCC?

编辑:语法

Hal*_*Hal 5

1.

C++语言方言

C++98[-std=c++98] through C++14[-std=c++14]
GNU++98[-std=gnu++98] through GNU++14[-std=gnu++14]
Run Code Online (Sandbox Code Playgroud)

C++ 语言随着时间的推移而发展。这些是您可以使用的各种语言版本。如果你必须与旧的东西兼容,你可能会被迫使用旧的。否则,您可能不想使用最新的可用版本,即上面列表中的 c++14。14 代表 2014 年,98 代表 1998 年 - 它应该代表该标准版本被祝福的年份。

除了标准 C++ 之外,还有非标准扩展。Gnu 是编译器“制造商”,上面的“GNU”是 GNU 为特定文档版本指定的非标准扩展。

C++ 标准库:

libstdc++(GNU C++ 标准库) libc++(支持 C++11 的 LLVM C++ 标准库)

除了基础语言,标准库也是标准的一部分。这是标准库的两种不同实现。第一个是 GNU,第二个是 llvm。llvm 是不同的编译器制造商。

在 osx 上,您可能会使用 libc++,因为我相信 llvm 编译器(clang++)现在是那里的标准配置。如果需要,llvm 编译器将支持 gnu 扩展。你可能没有。只需使用默认版本的最新版本即可。

  1. 是的
  2. 两个不同的部分,编译器和标准库。您可以将 clang++ 与 libstd++ 一起使用
  3. g++ -v 会告诉你
  4. 并不真地。将 xcode 更新到最新版本或开始查看自制软件或端口,以获取您喜欢的任何编译器的最新和最好的包。
  5. 可能是同一个编译器,您可以将其设置为指向已安装的任何编译器。所以每个点是你的选择。
  6. g++ 和 clang++ 都符合标准。你不太可能注意到太大的不同。他们会将相同的源文件编译为等效的二进制文件。
  7. 在任何终端中运行 g++ -v 以查看它到底是什么。