逐步解說:在命令列上編譯 C 程式
Visual Studio 建置工具包含 C 編譯程式,可讓您用來建立從基本控制台程式到完整 Windows 桌面應用程式、行動應用程式等所有專案。 Microsoft C/C++ (MSVC) 是 C 和 C++ 編譯程式,其最新版本符合一些最新的 C 語言標準,包括 C11 和 C17。
本逐步解說示範如何使用文本編輯器建立基本 「Hello, World」 樣式 C 程式,然後在命令行上編譯。 如果您想要在命令行上C++工作,請參閱 逐步解說:在命令行上編譯原生C++程式。 如果您想要嘗試 Visual Studio IDE 而不是使用命令行,請參閱 逐步解說:使用專案和方案 (C++) 或使用 Visual Studio IDE 進行C++桌面開發。
必要條件
若要完成本逐步解說,您必須已安裝Visual Studio或Visual Studio建置工具,以及使用 C++ 工作負載進行選擇性的桌面開發。
Visual Studio 是功能強大的集成開發環境,可支援許多語言和平臺的完整編輯器、資源管理員、調試程式和編譯程式。 如需這些功能以及如何下載及安裝 Visual Studio 的資訊,包括免費的 Visual Studio Community 版本,請參閱 安裝 Visual Studio。
Visual Studio 的 Build Tools for Visual Studio 版本只會安裝命令行工具組、編譯程式、工具和連結庫,以建置 C 和 C++ 程式。 它非常適合建置實驗室或教室練習,而且安裝速度相對較快。 若要只安裝命令行工具組,請從 Visual Studio 下載 頁面下載適用於 Visual Studio 的 Build Tools 並執行安裝程式。 在 Visual Studio 安裝程式中,選取具有 C++ 工作負載的桌面開發(在舊版 Visual Studio 中,選取 C++建置工具 工作負載),然後選擇 [ 安裝]。
當您安裝工具時,將會有另一個工具可用來在命令行上建置 C 或 C++ 程式。 MSVC 對於命令行環境有複雜的需求,可尋找其所使用的工具、標頭和連結庫。 您無法在一般命令提示字元視窗中 使用 MSVC,而不需要進行一些準備。 您需要開發人員 命令提示 字元視窗,這是已設定所有必要環境變數的一般命令提示字元視窗。 幸運的是,Visual Studio 會安裝快捷方式,讓您啟動已設定命令行組建環境的開發人員命令提示字元。 不幸的是,開發人員命令提示字元快捷方式的名稱及其所在位置幾乎在Visual Studio的每個版本和不同版本的 Windows 上都不同。 您的第一個逐步解說工作是尋找要使用的正確快捷方式。
注意
開發人員命令提示字元快捷方式會自動設定編譯程式和工具的正確路徑,以及任何必要的標頭和連結庫。 每個組建組態的其中一些值都不同。 如果您沒有使用其中一個快捷方式,則必須自行設定這些環境值。 如需詳細資訊,請參閱 從命令行使用 MSVC 工具組。 由於建置環境很複雜,因此強烈建議您使用開發人員命令提示字元快捷方式,而不是自行建置。
這些指示會根據您使用的 Visual Studio 版本而有所不同。 若要查看您慣用 Visual Studio 版本的文件,請使用版本選取器控制項。 其位於此頁面目錄頂端。
在 Visual Studio 2022 中開啟開發人員命令提示字元
如果您已在 Windows 10 或更新版本上安裝 Visual Studio 2022,請開啟 [開始] 功能表,然後選擇 [所有應用程式]。 然後向下卷動並開啟 Visual Studio 2022 資料夾(不是 Visual Studio 2022 應用程式)。 選擇 VS 2022 的開發人員命令提示字元以開啟命令提示字元視窗。
在 Visual Studio 2019 中開啟開發人員命令提示字元
如果您已在 Windows 10 或更新版本上安裝 Visual Studio 2019,請開啟 [開始] 功能表,然後選擇 [所有應用程式]。 然後向下卷動並開啟 Visual Studio 2019 資料夾(而非 Visual Studio 2019 應用程式)。 選擇 VS 2019 的開發人員命令提示字元以開啟命令提示字元視窗。
在 Visual Studio 2017 中開啟開發人員命令提示字元
如果您已在 Windows 10 或更新版本上安裝 Visual Studio 2017,請開啟 [開始] 功能表,然後選擇 [所有應用程式]。 然後向下卷動並開啟 Visual Studio 2017 資料夾(不是 Visual Studio 2017 應用程式)。 選擇 VS 2017 的開發人員命令提示字元以開啟命令提示字元視窗。
在 Visual Studio 2015 中開啟開發人員命令提示字元
如果您已在 Windows 10 或更新版本上安裝 Microsoft Visual C++ Build Tools 2015,請開啟 [開始] 功能表,然後選擇 [所有應用程式]。 然後,向下卷動並開啟 [Visual C++ Build Tools] 資料夾。 選擇 [Visual C++ 2015 x86 Native Tools 命令提示字元 ] 以開啟命令提示字元視窗。
如果您使用不同版本的 Windows,請查看包含開發人員命令提示字元快捷方式的 Visual Studio 工具資料夾 [開始] 功能表 或 [開始] 頁面。 您也可以使用 Windows 搜尋函式來搜尋「開發人員命令提示字元」,然後選擇一個符合您已安裝版本的 Visual Studio。 使用快捷方式開啟命令提示字元視窗。
接下來,確認開發人員命令提示字元已正確設定。 在命令提示字元視窗中,輸入 cl
(或 CL
,大小寫對編譯程式名稱無關緊要,但對編譯程式選項很重要)。 輸出應該看起來像這樣:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise>cl
Microsoft (R) C/C++ Optimizing Compiler Version 19.10.25017 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
視 Visual Studio 版本和安裝的任何更新而定,目前目錄或版本號碼可能會有差異。 如果上述輸出與您看到的內容類似,則可以在命令行建置 C 或 C++ 程式。
注意
如果您收到錯誤,例如「『cl』 無法辨識為內部或外部命令、可操作的程式或批處理檔」、錯誤 C1034 或當您執行 cl 命令時發生錯誤LNK1104,則表示您不是使用開發人員命令提示字元,或是安裝 Visual Studio 時發生問題。 您必須先修正此問題,才能繼續。
如果您找不到開發人員命令提示字元快捷方式,或在輸入 cl
時收到錯誤訊息,則 Visual Studio 安裝可能會發生問題。 如果您使用 Visual Studio 2017 或更新版本,請嘗試在 Visual Studio 安裝程式中使用 C++ 工作負載重新安裝桌面開發。 如需詳細資訊,請參閱 在Visual Studio中安裝C++支援。 或者,從 Visual Studio 下載 頁面重新安裝 [建置工具]。 在命令正常運作之前 cl
,請勿繼續下一節。 如需安裝和疑難解答 Visual Studio 的詳細資訊,請參閱 安裝 Visual Studio。
注意
根據電腦上的 Windows 版本和系統安全性設定,您可能必須以滑鼠右鍵按鍵按下以開啟開發人員命令提示字元快捷方式的快捷方式功能表,然後選擇 [ 以系統管理員 身分執行] 成功建置和執行您遵循本逐步解說建立的程式。
建立 C 原始程式檔並在命令行上編譯
在開發人員命令提示字元視窗中,輸入
cd c:\
,將目前的工作目錄變更為 C: 磁碟驅動器的根目錄。 接下來,輸入md c:\hello
以建立目錄,然後輸入cd c:\hello
以變更至該目錄。 此目錄會保存您的原始程式檔和已編譯的程式。在開發人員命令提示字元中輸入
notepad hello.c
。 在快顯的 [記事本警示] 對話框中,選擇 [ 是 ] 以在工作目錄中建立新的hello.c
檔案。在 [記事本] 中,輸入下列幾行程序代碼:
#include <stdio.h> int main() { printf("Hello, World! This is a native C program compiled on the command line.\n"); return 0; }
在 [記事本] 功能表欄上,選擇 [檔案>儲存] 以儲存
hello.c
在工作目錄中。切換回開發人員命令提示字元視窗。 在命令提示字元中輸入
dir
,以列出目錄的內容c:\hello
。 您應該會在目錄清單中看到來源檔案hello.c
,如下所示:C:\hello>dir Volume in drive C has no label. Volume Serial Number is CC62-6545 Directory of C:\hello 10/02/2017 03:46 PM <DIR> . 10/02/2017 03:46 PM <DIR> .. 10/02/2017 03:36 PM 143 hello.c 1 File(s) 143 bytes 2 Dir(s) 514,900,566,016 bytes free
您電腦上的日期和其他詳細數據會有所不同。 如果您沒有看到原始程式碼檔案,
hello.c
請確定您已變更為您所建立的c:\hello
目錄,然後在 [記事本] 中,確定您已將此原始程式檔儲存在此目錄中。 也請確定您已使用.c
擴展名儲存原始程式碼,而不是.txt
擴展名。若要編譯程式,請在開發人員命令提示字元中輸入
cl hello.c
。您可以在編譯程式顯示的輸出資訊列中看到可執行的程式名稱hello.exe:
c:\hello>cl hello.c Microsoft (R) C/C++ Optimizing Compiler Version 19.10.25017 for x86 Copyright (C) Microsoft Corporation. All rights reserved. hello.c Microsoft (R) Incremental Linker Version 14.10.25017.0 Copyright (C) Microsoft Corporation. All rights reserved. /out:hello.exe hello.obj
注意
如果您收到錯誤,例如「『cl』 無法辨識為內部或外部命令、可操作的程式或批處理檔」、錯誤 C1034 或錯誤LNK1104,則開發人員命令提示字元未正確設定。 如需如何修正此問題的資訊,請返回開啟 開發人員命令提示字元 一節。
如果您收到不同的編譯程式或鏈接器錯誤或警告,請檢閱原始程式碼以更正任何錯誤,然後儲存並再次執行編譯程式。 如需特定錯誤的相關信息,請使用此頁面頂端的搜尋方塊來尋找錯誤號碼。
若要執行程式,請在命令提示字元中輸入
hello
。程式會顯示下列文字並結束:
Hello, World! This is a native C program compiled on the command line.
恭喜,您已使用命令行編譯並執行 C 程式。
下一步
這個 「Hello, World」 範例與 C 程式可以取得的基本概念有關。 真實世界程式具有頭檔及更多原始程式檔、鏈接連結庫,以及執行有用的工作。
您可以使用本逐步解說中的步驟來建置自己的 C 程序代碼,而不是輸入顯示的範例程式代碼。 您也可以建置許多您在其他地方找到的 C 程式代碼範例程式。 若要編譯具有更多原始碼檔案的程式,請在命令行上輸入它們:
cl file1.c file2.c file3.c
編譯程式會輸出名為 file1.exe
的程式。 若要將名稱變更為 program1.exe
,請新增 /out 連結器選項:
cl file1.c file2.c file3.c /link /out:program1.exe
若要自動攔截更多程式設計錯誤,建議您使用 /W3 或 /W4 警告層級選項進行編譯:
cl /W4 file1.c file2.c file3.c /link /out:program1.exe
編譯程式cl.exe有更多選項可供您套用至建置、優化、偵錯和分析您的程序代碼。 如需快速清單,請在開發人員命令提示字元中輸入 cl /?
。 您也可以個別編譯和連結,並在更複雜的建置案例中套用連結器選項。 如需編譯程式和連結器選項和使用方式的詳細資訊,請參閱 C/C++建置參考。
您可以使用 NMAKE 和 makefiles,或 MSBuild 和項目檔,在命令行上設定及建置更複雜的專案。 如需使用這些工具的詳細資訊,請參閱 NMAKE 參考 和 MSBuild。
C 和 C++ 語言相似,但不同。 Microsoft C/C++ 編譯程式 (MSVC) 會使用基本規則來判斷編譯程式代碼時要使用的語言。 根據預設,MSVC 編譯程式會將結尾 .c
的所有檔案視為 C 原始程式碼,以及以 C++原始程式碼結尾 .cpp
的所有檔案。 若要強制編譯程式將所有檔案視為 C,不論擴展名為何,請使用 /TC 編譯程序選項。
根據預設,MSVC 與 ANSI C89 和 ISO C99 標準相容,但不符合規範。 在大部分情況下,可攜式 C 程式代碼會如預期般編譯並執行。 編譯程式提供 ISO C11/C17 中變更的選擇性支援。 若要使用 C11/C17 支援進行編譯,請使用編譯程式旗標 /std:c11
或 /std:c17
。 C11/C17 支援需要 Windows SDK 10.0.20201.0 或更新版本。 建議使用 Windows SDK 10.0.22000.0 或更新版本。 您可以從 Windows SDK 頁面下載最新的 SDK。 如需詳細資訊,以及如何安裝和使用此 SDK 進行 C 開發,請參閱 在 Visual Studio 中安裝 C11 和 C17 支援。
某些連結庫函式和POSIX函式名稱已被 MSVC 取代。 支援函式,但慣用的名稱已變更。 如需詳細資訊,請參閱 CRT 和 編譯程式警告 (層級 3) C4996 中的安全性功能。