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

标签 c++ xcode macos c++11 gcc

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

我主要是用Xcode来编写和编译,在Xcode的偏好设置里,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. 当我在本地终端中使用 g++ filename.cpp 运行 C++ 代码时,会调用什么编译器?

    5. 有什么方法可以确保这个g++“编译器”是最新的吗?

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

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

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

编辑:语法

最佳答案

1.

C++语言方言

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

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

关于c++ - 关于我在 OS X 上可用的各种 C++ 编译器的许多问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35592195/

相关文章:

c++ - 如何在 cocos2d-x 中使用 Sprite 表创建菜单

C++ "const"关键字解释

ios - 以编程方式更改导航栏标题

ios - 如何在 Parse.com 上存储个人资料图片的 PNG 图像?

mysql - 要在 Mac 上运行 MySQL 必须导出 DYLD_LIBRARY_PATH

macos - Wine64 是如何应对 macOS 的?

excel - 有没有办法将 mac 终端输出直接保存到文件中?

c++ unzip 返回无法创建提取目录

c++ - 错误 : expected primary-expression before ‘)’ token

ios - 无法从完成处理程序进行网络调用?