ユウの小屋

PCの更新内容やSLPでの活動、開発したもの等をupしていきます

SLP KBIT Advent Calendar 2014 -7日目-

はじめに

この記事は SLP KBIT Advent Calendar 2014 の7日目の記事です。
当ブログに書き忘れてた内容があったので、書くついでに記事にしました。
というわけで、「Clang」について語っていきます。

 

Clangとは

読み方は「クラン」。
一言で言うと、コンパイラフロントエンド。
コンパイルの下準備 … 字句解析・構文解析・意味解析を行う。
要は、ソースコードを解析して、ミスが無いかどうかチェックしてくれるもの。
Clang だけでコンパイルを行う訳ではなく、LLVM というものとセットで使う。
LLVM については、主旨から逸れるので省略。

導入方法も、環境によって違うので省略。
ちなみに自分は Cygwin に導入する際、apt-cyg で Clang を、wgetLLVM
入れました。

 

GCCとの違い

↑の文を見て、「別に GCC でいいじゃん」と思う人もいるだろう。
しかし、GCC と Clang の間には、明確な差がある。
これは見た方が早いので、ちょっとした実験を行って、結果を見ていただこう。

 

実験

下記のコードを GCC と Clang に扱わせる。
色々とおかしいところがあるので、それを検出させる。

#include <stdio.h>

int main(void) {

int a = 365;
char b[10] = {"クソネミ"}; // 配列のサイズが足りてない

printf("%s日%d\n", a, b); // %s と %d が逆

return 0 // ; が無い
}

まずは GCC。

f:id:Yuu-glassdog:20141206235434j:plain

 配列のサイズ不足についてはOK。

ただ、printfの型の違いについてはスルー。
そして、11行目を指して「セミコロンが無いよ」と言っているが、
実際にセミコロンを付けるべき場所は 10行目であり、分かりづらい。

 

次に、Clang。

f:id:Yuu-glassdog:20141206235524j:plain

おかしいところは全て検出されている。
さらに、波線で場所を分かりやすく示すだけでなく、どのように修正
すべきかまで示している。
セミコロンの付け忘れに関しても、キチンと10行目を指した上で、
エラーを吐いている。

両者を見比べてみると、Clangの方が分かりやすい。

 

結論

Clang、マジ便利。