共用方式為


Microsoft C/C++ 編譯器警告 C4000 到 C4199

本節中的文章說明 Microsoft C/C++ 編譯器警告訊息 C4000 到 C4199。

重要

Visual Studio 編譯器及建置工具可以報告許多類型的錯誤和警告。 發現錯誤或警告後,建置工具可能會假設程式碼意圖並嘗試繼續執行,以便可以同時報告更多問題。 如果工具做的假設有誤,那麼後來的錯誤或警告可能不適用於您的專案。 當您更正專案中的問題時,務必從所報告的第一個錯誤或警告開始進行。 一個修正程式可能會讓許多後續的錯誤消失。

若要取得 Visual Studio 中特定診斷訊息的說明,請在 [輸出] 視窗中選取該訊息,然後按下 F1 鍵。 如果存在,Visual Studio 會開啟該錯誤的文件頁面。 您也可以使用頁面頂端的搜尋工具來尋找有關特定錯誤或警告的文章。 或者,在此頁面上依照目錄中的工具和型別瀏覽錯誤與警告清單。

注意

並非每個 Visual Studio 錯誤或警告都有記載。 在許多情況下,診斷訊息會提供所有可用的資訊。 若您在使用 F1 時登陸此頁面,而且您認為錯誤或警告訊息需要額外的說明,請告訴我們。 您可以使用此頁面上的意見反應按鈕,在 GitHub 提出文件問題。 如果您認為錯誤或警告有誤,或發現工具組有其他問題,請在開發人員社群網站上回報產品問題。 您也可以傳送意見反應,並在 IDE 內輸入錯誤。 在 Visual Studio 中,移至功能表列,然後選擇 [說明] > [傳送意見反應] > [回報問題],或使用 [說明] > [傳送意見反應] > [傳送建議] 提交建議。 已建立某些編譯器錯誤主題,但編譯器未發出,現在會重新導向至此頁面。

您可以在 Microsoft Learn Q&A 論壇中找到針對錯誤和警告的其他協助。 或者,在 Visual Studio C++ 開發人員社群網站上搜尋錯誤或警告號碼。 您也可以搜尋 Stack Overflow 以尋找解決方案。

如需其他說明與社群資源的連結,請參閱 Visual C++ 說明與社群 (部分機器翻譯)。

警告訊息

警告 訊息
編譯器警告 (層級 4,不再發出) C4001 使用了非標準延伸模組 'single line comment'
編譯器警告 (層級 1,錯誤) C4002 類似函式的巨集引動過程 'identifier' 有太多引數
編譯器警告 (層級 1,錯誤) C4003 類似函式的巨集引動過程 'identifier' 沒有足夠的引數
編譯器警告 (層級 1) C4005 'identifier': 巨集重複定義
編譯器警告 (層級 1) C4006 #undef 必須是識別項
編譯器警告 (層級 3) C4007 'function': 必須是 'attribute'
編譯器警告 (層級 3) C4008 'function': 忽略了 'attribute' 屬性
編譯器警告 (層級 1) C4010 單行註解包含行接續字元
編譯器警告 (層級 3) C4013 'function' 未定義; 假設 extern 傳回整數
編譯器警告 (層級 1) C4015 'identifier': 位元欄位的類型必須為整數
編譯器警告 (層級 3) C4018 'expression': signed/unsigned 不相符
編譯器警告 (層級 4) C4019 在全域範圍有空的陳述式
編譯器警告 (層級 1) C4020 'function': 實質參數太多
編譯器警告 (層級 1) C4022 'function': 實質參數 'parameter_number' 的指標不符
編譯器警告 (層級 1) C4023 'function': 基底指標傳遞至沒有原型的函式: 參數 'parameter_number'
編譯器警告 (層級 1) C4024 'function': 型式和實質參數 'parameter_number' 的類型不同
編譯器警告 (層級 1) C4025 'function': 基底指標傳遞至擁有變數引數的函式: 參數 'parameter_number'
編譯器警告 (層級 1) C4026 宣告有型式參數清單的函式
編譯器警告 (層級 1) C4027 宣告沒有型式參數清單的函式
編譯器警告 (層級 1) C4028 型式參數 parameter_number 與宣告不同
編譯器警告 (層級 1) C4029 在函式宣告和函式定義中的型式參數清單不同
編譯器警告 (層級 1) C4030 第一型式參數清單比第二清單長
編譯器警告 (層級 1) C4031 第二型式參數清單比第一清單長
編譯器警告 (層級 4) C4032 升級時型式參數 parameter_number 具有不同的類型
編譯器警告 (層級 1) C4033 'function' 必須傳回值
編譯器警告 (層級 1) C4034 sizeof 傳回 0
編譯器警告 (層級 3) C4035 'function': 沒有傳回值
編譯器警告 (層級 1) C4036 未命名的 'type' 當做實質參數
編譯器警告 (層級 1) C4038 'modifier': 不合法的類別修飾元
編譯器警告 (層級 1) C4041 編譯器限制: 瀏覽器資訊超出編譯器上限,已終止輸出
編譯器警告 (層級 1) C4042 'identifier': 有錯誤的儲存類別
編譯器警告 (層級 1) C4045 'array': 陣列界限溢位
編譯器警告 (層級 1) C4047 'operator': 'identifier1' 在間接層級中不同於 'identifier2'
編譯器警告 (層級 1) C4048 下列陣列註標彼此不同: 'identifier1' 和 'identifier2'
編譯器警告 (層級 1) C4049 編譯器限制: 程式碼行數超過上限,已終止發出行號
編譯器警告 (層級 1) C4051 轉換類型,可能導致資料遺失
編譯器警告 (層級 1 和層級 4) C4052 函式宣告不同; 一個包含變數引數
編譯器警告 (層級 4) C4053 '?:' 有一類型為 void 的運算元
編譯器警告 (層級 1) C4055 'conversion': 從資料指標 'type1' 到函式指標 'type2'
編譯器警告 (層 2) C4056 在浮點常數算術中溢位
編譯器警告 (層級 4) C4057 'operator': 'identifier1' 在間接取值上與 'identifier2' 的基底類型有些許不同
編譯器警告 (層級 3,關閉) C4060 switch 陳述式沒有包含 'case' 或 'default' 標籤
編譯器警告 (層級 4,關閉) C4061 enum 'enumeration' 的 switch 中,case 標籤並未明確處理列舉程式 'identifier'
編譯器警告 (層級 4,關閉) C4062 enum 'enumeration' 的 switch 中未處理列舉程式 'identifier'
編譯器警告 (層級 4) C4063 case 'identifier' 不是 enum 'enumeration' switch 的有效值
編譯器警告 (層級 4) C4064 不完整 enum 'enumeration' 的 switch
編譯器警告 (層級 3,關閉) C4065 switch 陳述式包含 'default',但沒有 'case' 標籤
編譯器警告 (層級 3) C4066 忽略超出寬字元常數中第一個的字元
編譯器警告 (層級 1) C4067 未預期的語彙基元,接著前置處理器指示詞 - 必須是新行
編譯器警告 (層級 1) C4068 未知的 pragma 'identifier'
編譯器警告 C4069 長雙精度浮點數與l雙精度浮點數的精確度相同
編譯器警告 (層級 3) C4073 初始設定式置於程式庫初始化區域
編譯器警告 (層級 1) C4074 初始設定式置於編譯器保留的初始化區域
編譯器警告 (層級 1) C4075 初始設定式置於無法辨識的初始化區域
編譯器警告 (層級 1) C4076 'type_modifier': 無法與類型 'typename' 搭配使用
編譯器警告 (層級 1) C4077 未知的 check_stack 選項
編譯器警告 (層級 1) C4079 未預期的語彙基元 'token'
編譯器警告 (層級 1) C4080 必須是區段名稱的識別項,但卻找到 'symbol'
編譯器警告 (層級 1) C4081 必須是 'token1'; 但找到 'token2'
編譯器警告 (層級 1) C4083 必須是 'token'; 但找到識別項 'identifier'
編譯器警告 (層級 1) C4085 pragma 參數必須為 'on' 或 'off'
編譯器警告 (層級 1) C4086 pragma 參數必須為 '1'、'2'、'4'、'8' 或 '16'
編譯器警告 (層級 1) C4087 'function': 搭配 'void' 參數清單宣告
編譯器警告 (層級 1) C4088 'function': 指標與實質參數 'parameter_number' 中的不相符,型式參數 'parameter_number'
編譯器警告 (層級 1) C4089 'function': 類型與實質參數 'parameter_number' 中的不同,型式參數 'parameter_number'
編譯器警告 (層級 1) C4090 'operation': 不同的 'modifier' 限定詞
編譯器警告 (層級 1 和層級 2) C4091 'keyword': 當沒有宣告變數時,忽略 'type' 的左方
編譯器警告 (層級 4) C4092 sizeof 傳回 'unsigned long'
編譯器警告 (層級 2) C4094 未標記的 'token' 宣告沒有符號
編譯器警告 (層級 1) C4096 'identifier': 介面不是 COM 介面; 不會將其發出到 IDL
編譯器警告 (層級 1) C4097 pragma 參數必須為 'restore' 或 'off'
編譯器警告 (層級 1) C4098 'function': 'void' 函式正在傳回值
編譯器警告 (層級 2) C4099 'identifier': 類型名稱之前使用 'object_type1',現在發現使用 'object_type2'
編譯器警告 (層級 4) C4100 'identifier': 未參考的型式參數
編譯器警告 (層級 3 和層級 4) C4101 'identifier':未參考的區域變數
編譯器警告 (層級 3) C4102 'label': 未參考的標籤
編譯器警告 (層級 1) C4103 對齊在加入標頭之後有所變更,可能是因為缺少 #pragma pack(pop) 所致
編譯器警告 (層級 1) C4109 未預期的識別項 'identifier'
編譯器警告 (層級 1 和層級 4) C4112 #line 必須有介於 1 和 'line_count' 間的整數
編譯器警告 (層級 1) C4113 'identifier1' 與來自 'identifier2' 的參數清單不同
編譯器警告 (層級 1) C4114 相同類型的限定詞已經使用多次
編譯器警告 (層級 1 和層級 4) C4115 'type': 括弧中未命名類型的定義
編譯器警告 (層級 1) C4116 括號運算式中定義了未命名的類型
編譯器警告 (層級 1) C4117 巨集名稱 'name' 為保留字; 忽略 'Command'
編譯器警告 (層級 1) C4119 指定的基底 'base1' 和 'base2' 不同
編譯器警告 (層級 1) C4120 兩者分別為基底與非基底,無法轉換
編譯器警告 (層級 4) C4121 'symbol': 成員的記憶體對齊受 pack 影響
編譯器警告 (層級 1) C4122 'function': alloc_text 僅適用使用 C 連結的函式
編譯器警告 (層級 1) C4123 指定不同的基底運算式
編譯器警告 (層級 1) C4124 __fastcall 與堆疊檢查並用會降低執行效能
編譯器警告 (層級 4) C4125 八進位逸出序列結尾有十進位數字
編譯器警告 (層級 4) C4127 條件運算式是常數
編譯器警告 (層級 1) C4129 'character': 無法辨識的字元逸出序列
編譯器警告 (層級 4) C4130 'operator': 以字串常數的位址進行邏輯運算
編譯器警告 (層級 4) C4131 'function': 使用舊樣式的宣告子
編譯器警告 (層級 4) C4132 'object': 應初始化 const 物件
編譯器警告 (層級 1 和層級 3) C4133 'expression':不相容的類型 - 從 'type1' 到 'type2'
編譯器警告 C4137 'function': 沒有來自浮點函式的傳回值
編譯器警告 (層級 1) C4138 在註解外部找到 '*/'
編譯器警告 (層級 1,錯誤) C4141 'modifier':使用了一次以上
編譯器警告 (層級 1) C4142 'identifier': 良性的類型重複定義
編譯器警告 (層級 1) C4143 pragma 'same_seg' 不支援; 使用 __based 配置
編譯器警告 (層級 1) C4144 'expression': 關聯運算式做為 switch 運算式
編譯器警告 (層級 1) C4145 'expression1': 關聯運算式做為 switch 運算式; 可能與 'expression2' 混淆
編譯器警告 (層級 2) C4146 一元減號運算子套用 unsigned 類型,所得的結果也會是 unsigned 類型
編譯器警告 (層級 2) C4150 刪除指向不完整類型 'type' 的指標; 沒有解構函式可呼叫
編譯器警告 (層級 4) C4152 非標準的擴充,運算式中函式/資料的指標轉換
編譯器警告 (層級 1) C4153 運算式中函式/資料的指標轉換
編譯器警告 (層級 1) C4154 不能在陣列運算式上使用 delete; 所以將陣列轉換成指標
編譯器警告 (層級 1) C4155 刪除陣列運算式沒有使用陣列形式的 'delete'
編譯器警告 (層級 2) C4156 刪除陣列運算式沒有使用陣列形式的 'delete'; 改用陣列形式
編譯器警告 (層級 1) C4157 C 編譯器忽略 pragma
編譯器警告 (層級 1) C4158 假設為 #pragma pointers_to_members(full_generality, 'inheritance_type')
編譯器警告 (層級 3) C4159 #pragma 'pragma'(pop,...): 已經推出 (pop) 先前推入 (push) 的識別項 'identifier'
編譯器警告 (層級 1) C4160 #pragma 'pragma'(pop,...): 未發現先前推入的識別項 'identifier'
編譯器警告 (層級 3) C4161 #pragma 'pragma'(pop...): pop 的數目必須和 push 相同,否則可能導致非預期的行為
編譯器警告 (層級 1) C4162 'identifier': 找不到使用 C 連結的函式
編譯器警告 (層級 1) C4163 'identifier': 無法當做內建函式使用
編譯器警告 (層級 1) C4164 function': 內建函式未宣告
編譯器警告 (層級 3, 關閉) C4165 'HRESULT' 將會轉換為 'bool'; 您確定這是您要的?
編譯器警告 (層級 1) C4166 對建構函式/解構函式的不合法呼叫慣例
編譯器警告 (層級 1) C4167 'function': 僅供用為內建函式
編譯器警告 (層級 1) C4168 編譯器限制: 偵錯工具類型不足,必須刪除程式資料庫 'database' 並重新建置
編譯器警告 (層級 1) C4172 傳回區域變數或暫存 optional_context 的位址
編譯器警告 (層級 1) C4174 'name': 無法當做 #pragma component 使用
編譯器警告 (層級 1) C4175 #pragma component(browser, on): 瀏覽器資訊一開始必須在命令行上指定
編譯器警告 (層級 1) C4176 'subcomponent': #pragma component 瀏覽器的未知子元件
編譯器警告 (層級 1) C4177 #pragma 'pragma' 只能使用於全域範圍或命名空間範圍
編譯器警告 (層級 1) C4178 對 switch 運算式的類型而言,case 常數 'constant' 太大
編譯器警告 (層級 4,不再發出) C4179 將 '//*': 剖析為 '/' 和 '/\*': 與標準的 '//' 註解混淆
編譯器警告 (層級 1) C4180 套用至函式類型的限定詞沒有意義; 已忽略
編譯器警告 C4181 套用至參考類型的限定詞; 已忽略
編譯器警告 (層級 1) C4182 #include 具有 nest_count 層的巢狀層次,可能會造成無限遞迴
編譯器警告 (層級 1) C4183 'identifier': 遺漏傳回類型; 假設是傳回 'int' 的成員函式
編譯器警告 (層級 1) C4185 忽略未知的 #import 屬性 'attribute'
編譯器警告 (層級 1) C4186 #import 屬性 'attribute' 需要 'argument_count' 引數; 己忽略
編譯器警告 (層級 1) C4187 #import 屬性 'attribute1' 和 'attribute2' 不相容; 兩者都已忽略
編譯器警告 (層級 1) C4188 常數運算式不是整數,不能在這裡使用
編譯器警告 (層級 3 和層級 4) C4189 'identifier': 已初始化區域變數,但並未參考
編譯器警告 (層級 1) C4190 'identifier1' 已指定 C-連結,但傳回與 C 不相容的 UDT 'identifier2'
編譯器警告 (層級 3,關閉) C4191 'operation':從 'type_of_expression' 到 'type_required' 不安全的轉換
使用結果指標進行函式呼叫可能會導致程式失敗
編譯器警告 (層級 3) C4192 自動排除 'identifier' (於匯入類型程式庫 'library' 時)
編譯器警告 (層級 3) C4193 #pragma warning(pop): 沒有相符的 '#pragma warning(push)'
編譯器警告 (層級 1) C4194 無法巢狀化 #pragma start_map_region; 已忽略
編譯器警告 (層級 1) C4195 使用 #pragma stop_map_region 但沒有對應的 #pragma start_map_region; 已忽略
編譯器警告 (層級 1) C4196 必須是 'token1' 或 'token2'; 但找到 'token3'
編譯器警告 (層級 3) C4197 'type': 略過類型轉換中最上層的 volatile 類型
編譯器警告 (層級 1、層級 2、層級 3 和層級 4) C4199 message

另請參閱

C/C++ 編譯器與建置工具錯誤與警告 (部分機器翻譯)
編譯器警告 C4000 到 C5999