首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 專案在 Visual Studio 2013 無法編譯的常見原因與排查步驟

     編輯:程式設計綜合問答

現象

程式碼在其他環境正常,放入 VS2013 專案編譯失敗,錯誤訊息截圖不可見,但回覆提到「VISUAL STDIO 2013的環境,不行」。

VS2013 常見不相容點

項目VS2013 行為對應修正
C++11/14 支援度部分支援 (無泛型 lambda、無變數模板、無 `std::make_unique`)改用 C++11 相容寫法,或升級工具集 (v140/v141/v142)
預處理器差異`_MSC_VER == 1800`,某些標頭檔判斷邏輯不同檢查 `#if _MSC_VER` 區塊
標準庫實作較舊 STL,`std::regex` 不完整、`std::to_string` 可能缺失使用 `boost::lexical_cast` 或手寫轉換
專案設定遺漏預設字元集可能為 MBCS,非 Unicode專案屬性 → 一般 → 字元集:使用 Unicode
平台工具集預設 v120 (VS2013)若程式碼需新標準,安裝 VS2015+ Build Tools 並切換至 v140+

排查步驟

  1. 查看完整錯誤清單:輸出視窗 → 顯示輸出來源:建置 → 複製前 20 行錯誤。
  2. 最小重現:新建空專案,僅貼上核心類別/函式,嘗試編譯,隔離是專案設定還是程式碼問題。
  3. 檢查標頭檔順序:`#include ` 必須在其他標頭前,避免巨集汙染。
  4. 預編譯標頭:VS2013 預設啟用 `stdafx.h`,若未包含會報 `unexpected end of file while looking for precompiled header`。解法:專案屬性 → C/C++ → 預編譯標頭 → 不使用預編譯標頭。
  5. 運行期程式庫匹配:所有靜態庫、DLL、EXE 必須相同 (`/MD`、`/MT`、`/MDd`、`/MTd`),否則連結錯誤 LNK2005/LNK2038。

快速修正清單

  • ☐ 專案 → 屬性 → C/C++ → 語言 → C++ 語言標準:ISO C++14 標準 (`/std:c++14` 需 VS2017+,VS2013 無此選項)
  • ☐ 專案 → 屬性 → C/C++ → 程式碼產生 → 運行期程式庫:多執行緒 DLL (`/MD`)
  • ☐ 專案 → 屬性 → 連結器 → 一般 → 遞增連結:否 (`/INCREMENTAL:NO`)
  • ☐ 移除 `#pragma comment(lib, ...)` 改用專案屬性 → 連結器 → 輸入 → 額外相依性

根本建議

**VS2013 已於 2024 年 4 月結束支援**。新專案請直接使用 **Visual Studio 2022 Community** (免費) 或 **VS Code + MSVC/Clang**。舊專案遷移通常只需調整少數語法與專案設定,長遠收益遠大於維護舊工具鏈成本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved