Visual Studio 2017下如何使用Clang編譯器來寫C程序

在Visual Studio 2017中官方新增了Clang編譯器拥坛,當(dāng)前版本基于Clang 3.8.0,我們在安裝Visual Studio 2017時可以選擇安裝此組件尘分。這里筆者將為大家介紹一下如何安裝猜惋、設(shè)置、使用Clang編譯器培愁。筆者所使用的是Visual Studio 2017 Community Edition著摔。

首先,我們先安裝Visual Studio 2017定续,完成之后會彈出你想要安裝的一些插件梨撞,如下圖所示:


1.png

這里如果我們僅僅只是想開發(fā)純C語言程序的話就選擇“使用C++的桌面開發(fā)”即可,無需去選其他選項香罐。然后在右邊卧波,我們展開“單個組件”,然后勾選上“Clang/C2”庇茫,如下圖所示:


2.png

如果您之前已經(jīng)裝好了Visual Studio 2017也不用驚慌港粱,您可以打開Visual Studio 2017 installer程序,也能進入選擇安裝插件的界面旦签。
這些全都完成之后查坪,我們就可以新建一個C語言項目工程啦~

我們打開Visual Studio 2017,在歡迎界面中找到“新建項目”一欄宁炫,然后點擊“創(chuàng)建新項目...”這個藍色按鈕偿曙,如下圖所示:


3.png

接著會彈出新建項目對話框,如下圖所示羔巢。我們先選擇左邊的“Visual C++”下面的“Windows桌面”項望忆,然后選擇右邊的“Windows控制臺應(yīng)用程序”,然后自己設(shè)置好項目名稱以及工程所存放的路徑竿秆,點擊“完成”即可启摄。
4.png

進入項目工程后,我們先不要捉急幽钢,先確定好自己要開發(fā)的是基于32位的程序還是基于64位的程序歉备。如果我們要寫的是基于64位的應(yīng)用程序的話,先選擇x64匪燕,如下圖所示:


5.png

接著蕾羊,如果我們想在自己的工程中放入?yún)R編代碼喧笔,那么可以按下圖所示讓當(dāng)前的項目工程支持masm匯編器。


6.png

這里我們先選中右側(cè)欄中之前自己命名好的項目龟再,然后點擊鼠標右鍵溃斋,在彈出的項目欄中選擇“生成依賴項”,最后點擊“生成自定義”吸申。然后會彈出一個對話框梗劫,最后勾選上“masm”即可,按“確定”按鈕截碴,如下圖所示梳侨。
7.png

下面,我們要正式開始設(shè)置Clang編譯器了日丹。我們先選擇菜單欄中的“項目”走哺,然后點擊“xxx屬性”,如下圖所示哲虾。


8.png

然后彈出配置對話框丙躏。我們這里務(wù)必當(dāng)心,先設(shè)置配置項束凑,選擇“所有配置”晒旅,如果不是選“所有配置”,那么下面的配置僅針對當(dāng)前模式有效(Debug或Release模式)汪诉。隨后废恋,我們點擊左側(cè)欄中的“常規(guī)”,然后在右邊找到“平臺工具集”扒寄,將它設(shè)置為“Visual Studio 2017 - Clang with Microsoft CodeGen”鱼鼓,如下圖所示。


9.png

接著该编,我們展開左側(cè)欄中的“C/C++”一欄迄本,點擊“預(yù)編譯頭”,然后在右邊將“預(yù)編譯頭”設(shè)置為“不使用預(yù)編譯頭”课竣,如下圖所示嘉赎。
10.png

此時,我們可以點擊“完成”按鈕稠氮,關(guān)閉屬性設(shè)置對話框曹阔,然后要做一件事情半开,把我們當(dāng)前項目工程中的所有頭文件隔披、源文件全都刪干凈!如下圖所示寂拆。

11.png

然后新建一個C源文件奢米,比如名為main.c抓韩。我們先鼠標右鍵點擊右邊項目工程中的“源文件”,然后選擇“添加”鬓长,點擊“新建項”谒拴,如下圖所示。
12.png

完了之后會彈出新建文件的對話框涉波。我們在左側(cè)欄選中“代碼”英上,然后在右側(cè)欄選中“C++文件”。由于我們要新建的是一個C文件啤覆,而不是C++文件苍日,因此我們在命名文件名的時候必須顯式地將.c后綴名添加上!如下圖所示:
13.png

完成之后我們先不捉急寫代碼窗声,而是再進入菜單欄中“項目”里的“xxx屬性”相恃,此時要選中“C/C++”一欄中的“語言”,然后會出現(xiàn)“C語言標準”這一項笨觅,將它設(shè)置為“C11 (GNU Dialect) (-std=gnu11)”拦耐,這樣我們才能真正使用基于GNU11標準的C語言!如下圖所示:
14.png

下面我們終于可以開始敲代碼啦~我們可以嘗試以下代碼:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
// 由于VS-Clang目前不太成熟见剩,
// 因此這里必須讓stdnoreturn放在最后包含
#include <stdnoreturn.h>


#ifndef var
#define var     __auto_type
#endif

static void noreturn ProgramTerminate(void)
{
    printf("Program terminated...");
    getchar();
    exit(0);
}

static void __attribute__((overloadable)) Foo(void)
{
    puts("This is Foo!");
}

static void __attribute__((overloadable)) Foo(int a)
{
    printf("Foo a = %d\n", a);
}

extern int MyASMFunc(int a, int b);

int main(void)
{
    puts("Hello, Clang!");

    uint32_t a = 100;
    bool b = a > 50;
    printf("b = %d\n", b);

    _Static_assert(sizeof(a) == 4, "Not compatible environment!");

    var s = "Hello, world!";
    printf("The string is: %s\n", s);

    Foo();
    Foo(a);

    const var value = MyASMFunc(10, 8);
    printf("value = %d\n", value);

    ProgramTerminate();
}

上述代碼中杀糯,MyASMFunc函數(shù)是在一個匯編文件中實現(xiàn)的。我們可以用添加main.c文件的方式添加匯編文件苍苞,同樣鼠標右鍵點擊“源文件”火脉,然后選擇“新建項”。進入對話框后柒啤,同樣選擇“C++文件”倦挂,然后在下方文件名中寫上比如test.asm。各位需要注意的是担巩,在VS中匯編文件名后綴用的是.asm方援,而在其他編譯工具鏈中往往使用.s作為匯編文件后綴名。
然后我們在匯編文件中添加以下內(nèi)容:

.code

    MyASMFunc   proc public

    sub     ecx, edx
    mov     eax, ecx
    add     eax, 2
    ret

    MyASMFunc   endp

END

最后涛癌,我們點擊綠色三角箭頭即可構(gòu)建運行咯~這段程序在編譯時將不會有任何warning犯戏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拳话,隨后出現(xiàn)的幾起案子先匪,更是在濱河造成了極大的恐慌,老刑警劉巖弃衍,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呀非,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機岸裙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門猖败,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人降允,你說我怎么就攤上這事恩闻。” “怎么了剧董?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵幢尚,是天一觀的道長。 經(jīng)常有香客問我翅楼,道長侠草,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任犁嗅,我火速辦了婚禮边涕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘褂微。我一直安慰自己功蜓,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布宠蚂。 她就那樣靜靜地躺著式撼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪求厕。 梳的紋絲不亂的頭發(fā)上著隆,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音呀癣,去河邊找鬼美浦。 笑死,一個胖子當(dāng)著我的面吹牛项栏,可吹牛的內(nèi)容都是我干的浦辨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼沼沈,長吁一口氣:“原來是場噩夢啊……” “哼流酬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起列另,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤芽腾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后页衙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摊滔,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惭载。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旱函。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡响巢,死狀恐怖描滔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情踪古,我是刑警寧澤含长,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站伏穆,受9級特大地震影響拘泞,放射性物質(zhì)發(fā)生泄漏昔榴。R本人自食惡果不足惜歉糜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望莫绣。 院中可真熱鬧烟瞧,春花似錦诗鸭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至砾赔,卻和暖如春蝌箍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暴心。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工妓盲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人专普。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓本橙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脆诉。 傳聞我的和親對象是個殘疾皇子甚亭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容