小木頭報了 C/C++ 夏令營,聽說課程頗有深度,身為程式魔人老爸,自然不能容忍自家小孩上電腦課空手而回(喵的,拎杯多想上課把C學好擺脫罩門都沒機會好嗎?),所以搞個假日魔鬼特訓也是合情合理滴~

老師很開放,不限定作業系統不指定開發工具(VS 2015 Community/Dev-C++/GCC... ), 能寫程式能編譯測試就成,班上許多同學嫌 VS2015 笨重複雜,一堆人都選了 Dev-C++。

我也試用 Dev-C++ 帶他做了幾個練習題,功能完整性與貼心度自然無法跟 VS 相比,但確實挺簡單方便。 只是小木頭安裝的 Dev-C++ 有個嚴重問題,一跑 Line-By-Line 偵錯就會閃退,害我無法帶領他體驗「抓蟲的奧義」,這可不行。

只是想寫幾行 C/C++ 範例,連我也會嫌 Visual Studio 笨重,於是想起今年初心血來潮學會用 VSCode 寫 C/C++,VSCode,就決定是你了! (所以說亂點技能其實也沒什麼不好,你永遠不知道某天它莫名會派上用場 XD)

幸好當時做了筆記,很快在小木頭的筆電上裝好 MingGW + LLVM + VSCode + C/C++ 必要套件,設好 .vscode 所需 *.json,搞定開發環境, 只有一個地方要調整,範例程式有不少中文,在 VSCode 會變成亂碼,故檔案編碼要從預設 UTF-8 改成 cp950 (在 .vscode/settings.json 加 "files.encoding": "cp950" 即可),程式碼就順利搬進 VSCode 裡執行囉。

但有個小困擾,使用 Big5 編碼寫中文,執行顯示沒問題,但編輯過程會有警示訊息(例如:armstrong.c:12:24: warning: illegal character encoding in string literal [-Winvalid-source-encoding] printf("%d%d%d <AC>OArmstrong<BC><C6>", a, b, c);):

如上圖,中文一多訊息還挺煩人的~ 雖然錯誤訊息已提供「-Winvalid-source-encoding」關鍵字,我還是查了一陣子才找到正確解法,值得寫篇筆記備忘。

做法是在程式頂端加上#pragma clang diagnostic ignored "-Winvalid-source-encoding",薑薑薑薑~ 瞬間清爽:

後記:經過我實地展示 Intellisense 自動完成、程式碼自動排版、逐行偵錯與即時變數內容顯示後,VSCode 的功能讓小木頭大為驚豔,尤其是紅蚯蚓跟綠蚯蚓的貼心提醒更讓愛亂試語法的他十分傾心。在此向各位報告,VSCode 的忠實小粉絲本日再添一人。

Tips of how to disable illegal character encoding in string literal warning when using VSCode + LLVM compile C/C++ code.


Comments

# by Seravee

谢谢你的文章。我从事嵌入式开发,keil的新编译器报了同样的错误,按照你的方法顺利地排除了。

Post a comment