如何在終端機中使用 Visual C++

    前言

    Visual Studio 內部的 C 編譯器為 cl.exe,微軟網站有 cl.exe 參數等相關資料 (像是這裡)。

    在大部分情形下,程式設計者會透過 Visual Studio 間接使用此編譯器,甚少直接從命令列呼叫該編譯器。不過,我們有時會從終端機呼叫 cl.exe,像是要撰寫跨平台的 Makefile 時,就會用到 cl.exe 的命令列參數。此外,熟悉 cl.exe 的參數後,也可在 Visual Studio 中調整相關參數。

    基本指令

    最簡單的使用方式如下:

    > cl hello.c
    > .\hello.exe
    

    本文的目的是整理一些常見的使用情境,一開始沒用到的話也不用死背這些指令。

    檢查編譯器版本

    單獨輸入 cl 指令可檢視該編譯器的版本:

    > cl
    Microsoft (R) C/C++ Optimizing Compiler Version 19.13.26131.1 for x64
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    usage: cl [ option... ] filename... [ /link linkoption... ]
    

    如果在程式討論區,提供編譯器的版本偶爾會得到一些有用的回應。比較簡單的替代方法是提供 Visual Studio 的版本。

    開啟警告訊息

    理論上,使用 /Wall 參數可以開啟所有警告訊息,對修改程式有一些幫助;但 /Wall 會有過多的偽陽性,在實務上其實不好用,比較好用的參數是 /W4 (參考這裡)。

    使用 /sdl 參數可再多開啟一些和安全性相關的警告訊息。

    使用範例如下:

    > cl /W4 /sdl /Fe:program.exe source.c
    

    開啟除錯訊息

    使用 /Zi 參數可在編譯程式時額外產生一些除錯相關的訊息。

    選擇最佳化策略

    cl 常見的最佳化參數套餐如下:

    • /Od:關閉最佳化,預設情境
    • /O1:最省空間的最佳化
    • /O2:最佳速度的最佳化
    • /Os:偏向節省空間的最佳化
    • /Ot:偏向改善速度的最佳化

    除此之外,還有一些細節選項可調。一開始時不用耗費過多時間在調最佳化參數上面,在最後要發布程式時再來費心選擇即可。

    指定 C 標準 (C Standard) 的版本

    Visual C++ 可以指定以下 C 標準:

    • /std:c11
    • /std:c17

    不使用參數時,則使用原本的 MSVC 所支援的 C 標準,相當於 C99 和部分 C11。

    Visual C++ 預設會開啟 Microsoft 延伸特性。如果想要在 ANSI C 模式下編譯 C 程式碼,可以加上 /Za 參數。但撰寫 Win32 API 程式時,基本上無法使用 /Za 參數,因為 Win32 API 本身就不遵守 ANSI C 標準。

    連結外部檔案

    使用 /I 參數可在編譯時加入外部路徑,如下例:

    > for %x in (*.c) do cl /c %x
    > cl /Fe:program.exe *.obj /I\include
    

    編譯函式庫

    編譯靜態函式庫可參考以下指令:

    > for %x in (*.c) do cl /c %x
    > lib /out:something.lib *.obj
    

    Visual C++ 的靜態函式庫的副檔名是 .lib ,而非 .a

    編譯動態函式庫可參考以下指令:

    > for %x in (*.c) do /c %x
    > link /DLL /OUT:something.dll *.obj
    

    Windows 上的動態函式庫的副檔名是 .dll 而非 .so

    電子書籍

    如果你覺得這篇 C 語言的技術文章對你有幫助,可以看看以下完整的 C 語言程式設計電子書:

    現代 C 語言程式設計

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Yahoo
    【追蹤本站】
    Facebook Facebook Twitter Parler