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

Visual Studio 2013 中 C11 擴展函數 `__STDC_LIB_EXT1__` 未定義問題排查

     編輯:程式設計綜合問答

問題描述

在 VS2013 中定義 __STDC_LIB_EXT1__ 後,條件編譯仍進入 #else 分支,顯示「optional functions are not defined.」。

原因分析

  • VS2013 預設不完全支援 C11 Annex K(界限檢查介面),需安裝特定 Update 版本。
  • 巨集名稱拼寫錯誤:標準巨集為 __STDC_LIB_EXT1__(雙底線),而非 STDC_LIB_EXT1。
  • 專案屬性中「C/C++」→「語言」→「C 標準版本」未設為 C11(VS2013 僅部分支援)。

解決步驟

  1. 確認 VS2013 已安裝 Update 5 或更高版本。
  2. 在程式碼最前端定義巨集:#define __STDC_LIB_EXT1__ 1。
  3. 專案屬性 → C/C++ → 命令列,加入 /D __STDC_LIB_EXT1__。
  4. 若仍無效,考慮升級至 VS2015/2017 以獲得完整 C11 支援。

驗證代碼

#define __STDC_LIB_EXT1__ 1
#include <stdio.h>

int main(void) {
#if defined(__STDC_LIB_EXT1__)
    printf_s("optional functions are defined.\n");
#else
    printf_s("optional functions are not defined.\n");
#endif
    getchar();
    return 0;
}

若輸出「defined」,即表示環境已正確啟用 C11 擴展函數。

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