clang 及 gcc 的編譯訊息

[華語, cmn-Hant-TW]

因為 GPLv3 的問題,FreeBSD 將來的預設編譯器會從 gcc 往 clang 移動。clang 的賣點之一就是編譯的訊息較易懂,一個簡單的例子

1
2
3
4
5
6
#include <stdio.h>
 
main () {
  int a
  int b;
}
gcc version 4.2.1 20070719 [FreeBSD]
ft.c:3: warning: return type defaults to 'int'
ft.c: In function 'main':
ft.c:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
ft.c:5: warning: unused variable 'b'
ft.c:6: warning: control reaches end of non-void function
clang version 2.8 (trunk)
ft.c:3:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main () {
^
ft.c:4:8: error: expected ';' at end of declaration
  int a
       ^
       ;
1 warning and 1 error generated.

gcc 有加 -Wall 參數把 warning 印出來,預設是只會印出第 5 行有 error 的訊息。很明顯 clang 的輸出較具有可讀性,他明確指出第 4 行忘了加分號 (;) 而不是說第 5 行前面漏了什麼東西,另外若 Terminal 有支援的話,他的一些關鍵字及標示位置的符號(^)還會用不同的顏色表示,可以很清楚的看出問題出在哪裡。

希望 clang 能愈來愈普及!

Leave a Reply

Your email address will not be published. Required fields are marked *