Inštalácia
Gcc má pravdepodobne každý zvás na svojom linuxovom systéme.
Clag si naištalujete jednoducho ak používate
Debian/Ubuntu použite príkaz :
sudo apt-get install clang.
Alebo trochu náročnejšie posupnosťou príkazov:
1.
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
2.
cd llvm/tools
3.
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
4.
cd .. (back to llvm)
5.
./configure
6.
make
GCC
GCC je v dnešnej dobe štandardným open-source kompilátorom, je populárne a veľmi rozšírené.
Poskytuje širokú sadu statistických kontrol kódu. V tomto hľadisku je zatiaľ gcc neprekonané, ale o výstupe sato nedá povedať veď uvidíte sami.
GCC podporuje rôzne druhy jazykov čo sa o clang nedá povedať napr. Java,Fortran,Ada...
Ukážeme si pár najdôležitejších prepínačov pre kompiláciu.
-std=c99 -pedantic -std=c89 | : prepínače zaisťujú dodržiavanie štandardov |
-fsyntax-only | : kontroluje iba syntax |
-g | : v prípade že chceme kód dubugovať |
-Wall -Wextra | : základné sady warningov |
-Werror | : prepne warningy na chyby, |
-Wformat=2 | : dôsledná kontrola printf/scanf |
-Wswitch-default | : varovanie ak v switch chýba default vetva |
-Wstrict-overflow=5 | :varovanie o možných problémoch s pretečením hodnôt |
-Wshadow | :varovanie pri zakrytí globální premenné lokálnou premennou |
-Wmissing-declarations | :varovanie o funkciách definovaných bez predošlé deklarace |
-O -O0 -O1 -O2 -O3 | :optimalizácia kódu , nevhodné pre debugovanie |
CLANG
Clang je open-source kompilátor pre programovacie jazyky rodiny C
Len nedávno bol označený za stabilný kompilátor pre jayzk C. Obsahuje menšiu sadu kontrôl ale poskytuje zaujimavejší výstup
Väčšina prepínačov pre
GCC sa zhoduje aj pre
CLANG preto kludne používajte vyšie spomenuté.
Na clang je skvelé to že nemusíte vidieť pôvodný zdrojový kód aby ste pochopili kde je chyba.
Clang používa tkzv.
Expressive Diagnostics riadok s chybou je zvýraznený a podčiarknutý.
Ako si sami rýchlo všimnete clang sa snaží byť
user-friendly.
Hlavným zámerom pri vytváraní clang bola rýchlosť a pameťová nenáročnosť preto je clang minimálne 2 krát rýchlejší ako gcc a spotrebuje niekoľkonásobne menej pamete ako gcc.
Ukážky výstupov GCC a CLANG
Majme script kde premenná
i nieje definovaná, používame funkciu
printf a pritom sme nespravili include stdio.h .
GCC
GCC nám vypísalo kopec nepotrebných informácii pri tak malej chybe. Užitočné tam je číslo riadku a 'i' undeclared.
CLANG
Clang presne a k veci popísalo danú chybu, vypísalo chýbný riadok plus označilo presne miesto kde je problém.
Sami posúdte ktorý výstup je lepší.
V ďalšom príklade máme nesprávne priradenie premených a ich porovnávanie.
GCC
CLANG
V prototype funkcie nieje určený typ b. Vo funkcii main ma funkcia vela parametrov.
V printf sa snažíme vypísať reťazec ale máme ho v ''.
GCC
CLANG
Záver
Myslím že je jasne vidno kde clang drtivo poráža gcc, ale na druhú stranu v statistických kontrolách clang na gcc stále nemá.
Dúfám že sa vám porovnanie páčilo a ak neprejdete k clang tak ho možno aspoň vyskúšate.