【问题标题】:What are the names of different parts of GCC, Apple LLVM, and MSVC compilers?GCC、Apple LLVM 和 MSVC 编译器的不同部分的名称是什么?
【发布时间】:2019-05-21 22:21:07
【问题描述】:

我试图了解流行编译器不同部分的名称。我比较的编译器是 GNU Compiler Collection、Apple LLVM 和 Microsoft Visual C++。 (这些是编译器的正确名称吗?)下表是否正确:

GCC Apple LLVM MSVC
Backend GCC LLVM MSVC
C frontend gcc clang MSVC
C++ frontend g++ clang++ MSVC

还有;如果我在 mac 上使用命令 clang++ 编译我的 C++ 源文件:

$ clang++ --version
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

我正在使用的编译器的名称是什么?我应该说我正在使用 Apple Clang 吗?还是苹果 LLVM?还是别的什么?

【问题讨论】:

  • 我以为微软是CL.EXE(用于编译器/链接器)。
  • Microsoft 使用cl.exe 作为编译器驱动程序。 C 前端 (c1.dll)、C++ 前端 (c1xx.dll) 和编译器后端 (c2.dll) 是由 cl.exe 加载的独立 DLL。
  • 我认为您可能正在尝试获得比现有更多的订单。 LLVM 开发人员不能可靠地区分 C 和 C++。谈论 C++ 特定功能或错误的人通常会说“clang 确实……”或“gcc 表现……”。也许他们应该区分,但话又说回来,也许人们也应该更加小心that and which。你自己可以说你在 macos 10.4.1 上使用了 apple clang 10.0.1,但实际上降低了一些精度。
  • 不,我认为两者都可以。没有任何一个术语被如此多的人使用,以至于它可以被称为 the 正确的术语。无论好坏,人们都在使用不整洁的措辞。
  • 部分问题似乎是人为区分两部分(前端/后端)。编译器确实需要一个解析前端和一个代码生成后端,但两者之间可能存在中间步骤。即使只有这两个部分,编译器之间的确切职责划分也可能不同。属于编译器 A 前端的任务可能位于编译器 B 的后端,例如处理内在函数。

标签: c++ gcc visual-c++ clang llvm


【解决方案1】:

这似乎回答了这个问题:

GCC Apple LLVM MSVC
Backend GCC LLVM c2.dll
C frontend gcc clang c1.dll
C++ frontend g++ clang++ c1xx.dll

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多