1. 程式人生 > >關於gcc的一點小人性化提示

關於gcc的一點小人性化提示

lang ould turn statement content mat 2種 use track

如今對於大多數平臺的C編譯器來說都會有非常多種選擇,而gcc和clang無疑是2個非常優秀的C編譯器。當然他們也不僅僅是C編譯器。我近期用clang的比較多。原因有非常多。

只是一些小的細節非常讓我喜歡,比方OS X系統中,clang的編譯器警告或錯誤提示是以彩色文本醒目打印出來的。


而gcc則不管怎樣打印的顏色都一樣(我不知道是否有什麽設置能夠改變這一點)。


可是gcc也有其人性化的一點,就是在某些比較隱晦的錯誤時,會有更友好的提示。比方標簽後不能直接寫聲明這樣的情況。2種編譯器的結果例如以下:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
#include <unistd.h>

int main(void)
{
	int i = 0;
	puts("hello world!");
LAB:
	int x = 10;
	printf("now is %d\n",i++);
	sleep(3);
	goto LAB;
	return 0;
}

clang編譯結果:

[email protected]: c_src$clang -std=c11 -Wall -O3 -g0 -o x x.c

x.c:12:2: error: expected expression

int x = 10;

^

1 error generated.


gcc編譯結果:

[email protected]: c_src$gcc -std=c11 -Wall -O3 -g0 -o x x.c

gcc: warning: couldn‘t understand kern.osversion ‘14.0.0

x.c: In function ‘main‘:

x.c:12:2: error: a label can only be part of a statement and a declaration is not a statement

int x = 10;

^

x.c:12:6: warning: unused variable ‘x‘ [-Wunused-variable]

int x = 10;

^


能夠非常清楚的看出,前者僅僅是簡單一句模淩兩可的提示,讓剛開始學習的人丈二和尚摸不著頭腦;只是後者解釋的就非常清楚了,這是不是讓初學乍到的程序員們感覺非常溫馨呢?技術分享

關於gcc的一點小人性化提示