前言
程式設計者通常是在 Visual Studio 中間接呼叫 Visual C++ 內附的編譯器,直接使用指令的機會較少。學習的重點在於學習參數的設置方式,必要時可在 IDE 中修改。
如果需要自行撰寫 Makefile 等跨 IDE 的專案設定檔時,就有可能需要學習如何在終端機環境中使用 Visual C++。
基本的使用方式
一開始先知道以下指令即可:
> cl program.cc
> .\program.exe
在預設情形下,執行檔會和原始碼同名。如果需要更動執行檔的名稱,則加上 /Fe
參數。虛擬指令如下:
> cl /Fe:program source.cc
> .\program.exe
檢查 Visual C++ 版本
不加任何參數時,可以顯示 Visual C++ 的版本號:
> cl
Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30040 for x64
Copyright (C) Microsoft Corporation. 著作權所有,並保留一切權利。
不同版本的編譯器的特性和臭蟲相異。確認自己使用的編譯器版本有時會對處理問題有所幫助。
加入警告訊息
以下是 Visual C++ 中和警告訊息相關的參數:
/W1
:Level 1 警告/W2
:Level 2 警告/W3
:Level 3 警告/W4
:Level 4 警告/Wall
:開啟所有警告/sdl
:啟用其他安全性功能和警告/WX
:將警告視為錯誤
使用警告訊息的虛擬指令如下:
> cl /W4 /sdl /Fe:program source.cc
有些警告是無害的,不需要刻意開啟 /WX
參數。
實際上,/Wall
有過多的偽陽性報告,使用 /W4
反而比較好 (出處)。
加入除錯訊息
編譯時加入 /Zi
參數,可以在執行檔中加入除錯相關資訊。由於除錯訊息對執行程式沒有幫助,程式要上線時,最好關掉這個參數後,重新編譯程式。
最佳化
以下是 Visual C++ 提供的最佳化參數:
/Od
:關閉最佳化 (預設值)/O1
:最省空間的最佳化/O2
:最佳速度的最佳化/Os
:偏向節省空間的最佳化/Ot
:偏向改善速度的最佳化/favor:
:針對特定 CPU 的最佳化blend
:64 位元 CPUAMD64
:AMD 64 位元 CPUINTEL64
:Intel 64 位元 CPUATOM
:Intel ATOM CPU
最佳化對執行程式有影響,但對學習 C++ 語法沒有幫助。所以不需要在這些參數糾結過久。
編譯多個檔案
剛開始學習 C++ 時,程式碼很短,寫在單一檔案即可。實務上的 C++ 程式會拆分在多個檔案中。本節介紹編譯多個 C++ 檔案的方式。
使用單一指令
使用以下虛擬指令可以用單一指令將多個 C++ 原始碼編譯成執行檔:
> cl /Fe:program a.cc b.cc c.cc
拆成多個步驟
先將原始碼編譯成目的檔:
> cl /c a.cc b.cc c.cc
再將目的檔編譯成執行檔:
> cl /Fe:program a.obj b.obj c.obj
指定 C++ 標準版本
使用 /std:
參數可指定 C++ 標準的版本。以下是可用的版本:
c++14
c++17
c++20
c++latest
:功能隨時變動
如果想要撰寫標準 C++,可再搭配 /permissive-
參數,停用非標準 C++ 的語法。
以下是相關的虛擬指令:
> cl /std:c++14 /permissive- /Fe:program source.cc
加入外部函式庫
使用 /I
參數可指定標頭檔 (header) 的位置:
> cl /Fe:program source.cc mylib.lib /I.\path\to\include
編譯函式庫
函式庫是 C++ 用來共享程式的方式。本節介紹編譯函式庫的方式。
編譯靜態函式庫
先將原始碼編譯成目的檔:
> cl /c a.cc b.cc c.cc
再將目的檔編譯成靜態函式庫:
> lib /out:something.lib *.obj
編譯動態函式庫
先將原始碼編譯成目的檔:
> cl /c a.cc b.cc c.cc
使用 Visual C++ 編譯函式庫時,不需要區分目的檔所用的參數。
再將目的檔編譯成動態函式庫:
> link /DLL /OUT:something.dll *.obj