ClangとGCC

一週間で身につくC言語の基本|コラム より引用。

世界中に普及したGCCですが、現在それに置き換わるこののできるコンパイラを提供することを目的とした、「Clang(クラン)」というコンパイラの開発プロジェクトが進行しています。

コンパイラには、「フロントエンド」と「バックエンド」の2つの側面があるということを理解する必要があります。コンパイラの「フロントエンド」とは、ソースコードを分析して中間表現と呼ばれる抽象的なデータに置き換える部分です。それに対し、「バックエンド」とは、フロントエンドによって生成された、中間表現を最終的なコードに生成する部分です。

Clangは、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラフロントエンドという位置づけになっています。これに対して、バックエンドとしてLLVMと呼ばれるものを用いるコンパイラが今後の主流になりそうなのです。

LLVM の名称の由来は、Low Level Virtual Machine (低水準仮想機械) の略で、中間言語を介して、対象のアーキテクチャに最適なマシン語へ変換することができます。

LLVM(コンパイラバックエンド)のフロントエンドがClang。

C言語をコンパイルしてみる

// helloworld.c
#include<stdio.h>

int main(void) {
  printf("Hello C world");
  return 0;
}
$ clang helloworld.c -o helloworld.o
$ ./helloworld.o
Hello C world

参考. [LLVM/Clang] LLVM/Clangを知る【はじめに】 | DevelopersIO

GCC vs Clang

GCCとClangどちらがおすすめですか?に対する山口佳成 (Yoshiaki, Yamaguchi)さんの回答 - Quora より:

  • GCC
    • GCCしかサポートしていないCPUアーキテクチャもある(らしい)
    • C/C++しかサポートしていない
    • 競技プログラミングに便利なライブラリがある
    • GCCの中身はだいぶカオスになっているとよく言われている
    • 大昔から標準だったのでGCC前提のプログラムも多い
  • Clang
    • GCCより一般的に高速
    • C/C++以外の言語もサポートしている(改めて環境構築する必要がない)
    • Clangは0から作っているので内部がスッキリしている
    • 非互換部分もあるのでGCCを前提としたプログラムが全く同様にビルドできるかどうかはわからない
  • その他
    • 両者でライセンスが異なるので要注意(商用アプリならClangの方がライセンス的にやりやすい)

あとはエラーメッセージがGCCよりも親切であるらしい。