本節中的文章說明 Microsoft C/C++ 編譯器警告訊息 C4200 到 C4399。
重要
Visual Studio 編譯器及建置工具可以報告許多類型的錯誤和警告。 發現錯誤或警告後,建置工具可能會假設程式碼意圖並嘗試繼續執行,以便可以同時報告更多問題。 如果工具做的假設有誤,那麼後來的錯誤或警告可能不適用於您的專案。 當您在專案中更正問題時,務必從所報告的第一個錯誤或警告開始,並經常重新建置。 一個修正程式可能會解決多個後續錯誤。
若要取得 Visual Studio 中特定診斷訊息的說明,請在 [輸出] 視窗中選取該訊息,然後按下 F1 鍵。 如果存在,Visual Studio 會開啟該錯誤的文件頁面。 您也可以使用頁面頂端的搜尋工具來尋找有關特定錯誤或警告的文章。 或者,瀏覽此頁面目錄中的工具和類型分列的錯誤和警告清單。
注意
並非每個 Visual Studio 錯誤或警告都有記載。 在許多情況下,診斷訊息會提供所有可用的資訊。 如果您登陸此頁面並認為錯誤或警告訊息需要其他說明,請使用此頁面的意見反應按鈕讓我們知道。 如果您認為錯誤或警告有誤,或發現工具組有其他問題,請在開發人員社群網站上回報產品問題。 您也可以傳送意見反應,並在 IDE 內輸入錯誤。 在 Visual Studio 中,移至功能表欄,然後選擇 [說明] > [傳送意見反應] > [回報問題],或使用 [說明] > [傳送意見反應] > [建議功能]來提交建議。 某些不由編譯器發出的編譯器錯誤主題已建立,現在將重新導向至此頁面。
您可以在 Microsoft Q&A C++ 論壇中找到其他關於錯誤和警告的協助。 或者,在 Visual Studio C++ 開發人員社群網站上搜尋錯誤或警告號碼。 您也可以搜尋 Stack Overflow 以尋找解決方案。
如需其他協助與社群資源的連結,請參閱 Visual C++ 說明與社群。
警告訊息
| 警告 | 訊息 |
|---|---|
| 編譯器警告 (層級 2 和層級 4) C4200 | 使用非標準擴充功能:在結構體/聯合體中使用零大小的陣列 |
| 編譯器警告 (層級 4) C4201 | 使用非標準擴展:匿名的結構體/聯合體 |
| 編譯器警告 (層級 4) C4202 | 使用非標準的擴充: '...': 名稱清單中的原型參數不合法 |
| 編譯器警告 C4203 | 使用非標準的擴充: union 中包含靜態成員變數 |
| 編譯器警告 (層級 4) C4204 | 使用非標準的擴充: 非常數的集合初始化器 |
| 編譯器警告 (層級 4) C4205 | 非標準擴充用法:函式範圍內的靜態函式宣告 |
| 編譯器警告 (層級 4) C4206 | 使用非標準的擴充: 翻譯單元為空 |
| 編譯器警告 (層級 4) C4207 | 使用非標準的擴充: 擴展的初始化表單 |
| 編譯器警告 (層級 4) C4208 | 使用非標準的擴充: delete [exp] - 會評估 exp 運算式但結果被忽略 |
| 編譯器警告 (層級 4) C4210 | 使用非標準的擴充:函式具有檔案作用域 |
| 編譯器警告 (層級 4) C4211 | 使用非標準的擴充: 將 extern 重新定義為靜態 |
| 編譯器警告 (層級 4) C4212 | 使用非標準的擴充: 函式宣告使用省略 |
| 編譯器警告 (層級 4) C4213 | 使用非標準的擴充: 在左值 (l-value) 上進行類型轉換 |
| 編譯器警告 (層級 4) C4214 | 使用非標準的擴充: 非整數的位元欄位類型 |
| 編譯器警告 (層級 1) C4215 | 使用非標準的擴充: long float |
| 編譯器警告 (層級 1) C4216 | 使用了非標準擴充:float long |
| 編譯器警告 (層級 4) C4218 | 使用非標準的擴充: 必須指定至少一個儲存類別或類型 |
| 編譯器警告 (層級 4) C4220 | varargs 符合剩餘的參數 |
| 編譯器警告 (層級 4) C4221 | 使用非標準擴充:'identifier':不可使用自動變數 'variable' 的位址來進行初始化 |
| 編譯器警告 (層級 1 和層級 4) C4223 | 使用非標準的擴充: 將非左值陣列轉換為指標 |
| 編譯器警告 (層級 1) C4224 | 使用非標準的擴充: 之前已將型式參數 'identifier' 定義為類型 |
| 編譯器警告 (層級 1,錯誤) C4226 | 使用非標準的擴充: 'keyword' 為過時的關鍵字 |
| 編譯器警告 (層級 1) C4227 | 不合時宜的用法: 參考中的限定條件被忽略了 |
| 編譯器警告 (層級 1) C4228 | 使用非標準的擴充: 宣告清單中逗號後的限定詞會被忽略 |
| 編譯器警告 (層級 1,錯誤) C4229 | 過時的用法:資料上的修飾元已被忽略 |
| 編譯器警告 (層級 1) C4230 | 過時的用法: 修飾元/限定詞位置顛倒; 已忽略限定詞 |
| 編譯器警告 (層級 4) C4232 | 使用非標準的擴充: 'identifier': dllimport 'dllimport' 的位址不是靜態的,不保證唯一 |
| 編譯器警告 (層級 1,錯誤) C4233 | 使用非標準的擴充: 僅在 C++ 中支援 'keyword' 關鍵字,C 不支援 |
| 編譯器警告 (層級 4,錯誤) C4234 | 使用非標準的擴充: 保留 'keyword' 關鍵字供日後使用 |
| 編譯器警告 (層級 1,錯誤) C4235 | 使用了非標準的擴充: 這種架構不支援 'keyword' 關鍵字 |
| 編譯器警告 (層級 1) C4237 | 目前尚未支援 'keyword' 關鍵字,但保留供將來使用 |
| 編譯器警告 (層級 4) C4238 | 使用非標準的擴充: 類別右值當做左值使用 |
| 編譯器警告 (層級 4) C4239 | 使用非標準的擴充: 'token': 從 'type1' 轉換成 'type2' |
| 編譯器警告 (層級 3) C4240 | 使用非標準的擴充: 對 'classname' 的存取權現在定義為 'access_specifier1',先前定義為 'access_specifier2' |
| 編譯器警告 (層級 3,關閉) C4242 | 'identifier': 將 'type1'轉換為 'type2',資料可能遺失 |
| 編譯器警告 (層級 3) C4243 | conversion_type 從 'type1' 至 'type2' 的轉換已經存在,但無法存取 |
| 編譯器警告 (層級 2) C4244 | 'conversion_type': 將 'type1' 轉換為 'type2',資料可能遺失 |
| 編譯器警告 (層級 2 和層級 3 和層級 4) C4244 | 'conversion_type': 將 'type1' 轉換為 'type2',資料可能遺失 |
| 編譯器警告 (層級 4) C4245 | 'conversion_type': 從 'type1' 轉換成 'type2',正負號/無號不匹配 |
| 編譯器警告 (層級 2) C4250 | 'classname': 以支配方式繼承 'base_classname::member' |
| 編譯器警告 (層級 2) C4251 | 'type':'type1' 必須有供 'type2' 客戶端使用的 dll 介面 |
| 編譯器警告 (層級 4,關閉) C4254 | 'operator': 從 'type1':'field_bits' 轉換成 'type2':'field_bits',可能會遺失資料 |
| 編譯器警告 (層級 4, 關閉) C4255 | 'function': 未提供函式原型: 將 '()' 轉換為 '(void)' |
| 編譯器警告 (層級 4) C4256 | 'function': 具有虛擬基底類別的建構函式有 '...'; 呼叫可能與舊版的 Visual C++ 不相容 |
| 編譯器警告 (層級 1) C4258 | 'variable': 已忽略來自 for 迴圈的定義; 使用封閉範圍的定義 |
| 編譯器警告 (層級 4, 關閉) C4263 | 'function': 成員函式不覆寫任何基底類別的虛擬成員函式 |
| 編譯器警告 (層級 4, 關閉) C4264 | 'virtual_function': 來自基底 'classname' 的虛擬成員函式沒有可用的覆蓋;函式已被隱藏 |
| 編譯器警告 (層級 3, 關閉) C4265 | 'classname':類別有虛擬函式,但其非平凡的解構函式不是虛擬的,因此此類別的執行個體可能無法正確解構。 |
| 編譯器警告 (層級 4, 關閉) C4266 | 'virtual_function': 來自基底 'classname' 的虛擬成員函式沒有可用的覆蓋;函式已被隱藏 |
| 編譯器警告 (層級 3) C4267 | 'variable': 將 'size_t' 轉換為 'type',資料可能遺失 |
| 編譯器警告 (層級 4) C4268 | 'identifier': 使用編譯器產生的預設建構函式來宣告並初始化為 'const' 的靜態/全域資料,並將物件的值填充為零。 |
| 編譯器警告 (層級 1) C4269 | 'identifier': 'const' 將以編譯器產生的預設建構函式自動地初始化資料,這會產生無法預期的結果 |
| 編譯器警告 (層級 1) C4272 | 'function': 標記為 __declspec(dllimport),在匯入函式時必須指定原生呼叫慣例。 |
| 編譯器警告 (層級 1) C4273 | 'function': 不一致的 DLL 連結 |
| 編譯器警告 (層級 1) C4274 |
#ident 已略過;請參閱文件以取得 #pragma comment(exestr, 'string') |
| 編譯器警告 (層級 2) C4275 | 非 dll 介面 classkey 'identifier1' 被用作 dll 介面 classkey 'identifier2' 的基底. |
| 編譯器警告 (層級 1) C4276 | 'function': 未提供原型; 假設沒有參數 |
| 編譯器警告 (層級 1) C4277 | 匯入的項目 'classname::member' 以資料成員和函式成員的方式同時存在; 已忽略資料成員 |
| 編譯器警告 (層級 3 和層級 4) C4278 | 'identifier': 類型程式庫 'library' 中的識別碼已經是巨集,請使用 'rename' 修飾詞。 |
| 編譯器警告 (層級 3 和層級 4) C4279 | 'identifier': 類型庫 'library' 中的識別符號是關鍵字; 使用 'rename' 修飾符 |
| 編譯器警告 (層級 3) C4280 | 透過類型 'operator ->',' 為自我遞迴 |
| 編譯器警告 (層級 3) C4281 |
operator -> 經由類型 'type1' 發生遞迴。 |
| 編譯器警告 (層級 3) C4282 | 然後透過類型 'type2' |
| 編譯器警告 (層級 3) C4283 | 也透過類型 'typeN' |
| 編譯器警告 (層級 2) C4285 | 如果使用中置標記法來應用,'identifier::operator ->' 的傳回型別是遞迴的 |
| 編譯器警告 (層級 1) C4286 | 'derived_type': 在 line_number 行上被基底類別 ('base_type') 攔截 |
| 編譯器警告 (層級 3, 關閉) C4287 | 'operator': 無符號/負數常數不匹配 |
| 編譯器警告 (層級 1) C4288 | 使用非標準擴充: 'variable': 在 for-loop 中宣告的迴圈控制變數在 for-loop 範圍外使用; 與外部範圍中的宣告衝突 |
| 編譯器警告 (層級 4, 關閉) C4289 | 使用非標準的擴充: 'variable': 在 for-loop 範圍外使用 for-loop 中所宣告的迴圈控制變數 |
| 編譯器警告 (層級 3) C4290 | 略過 C++ 例外狀況規格,除非將函式標示為非 __declspec(nothrow) |
| 編譯器警告 (層級 1) C4291 | 'declaration': 找不到對應的 delete 運算子;若初始化時發生例外狀況,記憶體將無法被釋放 |
| 編譯器警告 (層級 1) C4293 | 'shift_operator': 移位計數為負值或太大,未定義的行為 |
| 編譯器警告 (層級 4) C4295 | 'array': 陣列太小無法包含結束的 null 字元 |
| 編譯器警告 (層級 4, 關閉) C4296 | 'operator': 運算式一律為 boolean_value |
| 編譯器警告 (層級 1) C4297 | 'function': 函式預設並不會擲回例外狀況,但卻擲回例外狀況 |
| 編譯器警告 (層級 4) C4298 | 'identifier': 類型程式庫 'library' 中的識別項已經是巨集; 重新命名為 '__identifier' |
| 編譯器警告 (層級 4) C4299 | 'identifier': 在類型庫 'library' 中的識別字是關鍵字,將其重新命名為 '__identifier' |
| 編譯器警告 C4301 | 'derived_class::function': 覆寫虛擬函式僅在 const/volatile 限定符上有別於 'base_class::function' |
| 編譯器警告 (層級 2) C4302 | 「型別轉換」發生從「type1」到「type2」的截斷狀況 |
| 編譯程式警告 (不再發出) C4303 | 從 'type1' 到 'type2' 的 C 樣式轉換已過時,使用 static_cast、__try_cast 或 dynamic_cast |
| 編譯器警告 (層級 1 和層級 2 和層級 4) C4305 | 「型別轉換」發生從「type1」到「type2」的截斷狀況 |
| 編譯器警告 (層級 4) C4306 | 'conversion': 將 'type1' 轉換為較大的 'type2' |
| 編譯器警告 (層級 2) C4307 | 'operator': 符號位整數常數溢位 |
| 編譯器警告 (層級 2) C4308 | 將負整數常數轉換為無符號類型 |
| 編譯器警告 (層級 2) C4309 | 'conversion': 常數值截斷 |
| 編譯器警告 (層級 4) C4310 | 類型轉換截斷常數值 |
| 編譯器警告 (層級 1) C4311 | 'variable':指標從 'type1' 轉換為 'type2' 時發生截斷 |
| 編譯器警告 (層級 1) C4312 | 'operation': 將 'type1' 轉換為較大的 'type2' |
| 編譯器警告 (層級 1) C4313 | 格式字串中的 'function': '%format_specifier' 與類型 'type' 的引數 argument_number 產生衝突 |
| 編譯器警告 C4314 | pragma 參數必須為 '32' 或 '64' |
| 編譯器警告 (層級 4) C4315 | 'classname': 成員 'member' 的 'this' 指標可能無法如建構函式預期般對齊 alignment |
| 編譯器警告 (層級 3) C4316 | 'identifier': 在堆上配置的物件可能無法按 alignment 對齊 |
| 編譯器警告 (層級 1) C4317 | 'printf_family' : 傳遞給格式字串的引數不足 |
| 編譯器警告 C4318 | 將常數零作為長度傳遞至 memset 函數 |
| 編譯器警告 (層級 1) C4319 | 'operator': 將 'type1' 零擴展至更大尺寸的 'type2' |
| 編譯器警告 (層級 1) C4321 | 自動產生介面 'interface' 的 IID |
| 編譯器警告 (層級 1) C4322 | 自動產生類別 'class' 的 CLSID |
| 編譯器警告 (層級 1) C4323 | 重新使用類別 'class' 的已登錄 CLSID |
| 編譯器警告 (層級 4) C4324 | 'structname':結構由於對齊指定符進行了填充 |
| 編譯器警告 (層級 1) C4325 | 已忽略標準區段 'section' 的屬性 |
| 編譯器警告 (層級 1) C4326 | 'function' 的傳回型別應該是 'type1' 而不是 'type2' |
| 編譯器警告 C4327 | 'assignment': LHS ('alignment1') 的間接對齊大於 RHS ('alignment2') |
| 編譯器警告 C4328 | 'function': 正式參數 parameter_number (parameter_alignment) 的間接對齊大於實際引數對齊 (argument_alignment) |
| 編譯器警告 (層級 1) C4329 | 在列舉中會忽略對齊指定符 |
| 編譯器警告 (層級 1) C4330 | 忽略區段「section」的屬性「attribute」 |
| 編譯器警告 (層級 1) C4333 | 'shift_operator': 向右位移量太大,資料遺失 |
| 編譯器警告 (層級 3) C4334 | 'shift_operator': 32 位元位移的結果已隱含轉換為 64 位元 (是否原來就是要進行 64 位元位移?) |
| 編譯器警告 (層級 1) C4335 | 偵測到 Mac 檔案格式: 請將原始程式檔轉換為 DOS 或 UNIX 格式 |
| 編譯器警告 (層級 4) C4336 | 在匯入 'library2' 之前,請先匯入交互參考類型程式庫 'library1' |
| 編譯器警告 (層級 4) C4337 | 'library2' 中的交互參考類型程式庫 'library1' 已自動匯入 |
| 編譯器警告 (層級 4) C4338 | #pragma 指令: 使用標準區段 'section' |
| 編譯器警告 (層級 4, 關閉) C4339 | '類型': 使用在 WinRT/CLR 元數據中偵測到的未定義類型 - 使用此類型可能會導致運行時間例外狀況 |
| 編譯器警告 (層級 1) C4340 | 'value': 將值從正值包裝成負值 |
| 編譯器警告 (層級 1,關閉,不再發出) C4342 | 行為變更:function 已被呼叫,但在先前的版本中,呼叫的為成員運算子。 |
| 編譯器警告 (層級 4) C4343 |
#pragma optimize("g",off) 覆蓋 /Og 選擇 |
| 編譯器警告 (層級 1) C4344 | 行為變更: 使用明確樣板引數會導致對 'function' 的呼叫 |
| 編譯器警告 (層級 1) C4346 | 'name': 相依名稱不是類型 |
| 編譯器警告 (層級 1) C4348 | 'type': 預設參數重複定義: 參數 parameter_number |
| 編譯器警告 (層級 1,關閉,不再發出) C4350 | 行為變更: 呼叫了 'member1' 而不是 'member2' |
| 編譯器警告 (層級 1) C4352 | 'identifier': 內部函數已經定義 |
| 編譯器警告 (層級 1) C4353 | 使用了非標準的擴充:常量 0 當做函數表達式。 請用內建函式 '__noop' 代替 |
| 編譯程式警告 (層級 1 和層級 4,關閉) C4355 | 'this': 在基底成員初始設定式清單中使用 |
| 編譯器警告 (層級 2) C4356 | 'member': 無法透過衍生類別初始化靜態資料成員 |
| 編譯器警告 (層級 3) C4357 | 在為 'delegate' 生成 'function' 時,忽略了型式引數清單中找到的 param 陣列引數 |
| 編譯器警告 (層級 1) C4358 | 'operator': 組合委派的傳回類型不是 'void',傳回的值未定義 |
| 編譯器警告 (層級 1 和層級 3) C4359 | 'type': 對齊規範小於實際對齊 (alignment),將予以忽略。 |
| 編譯器警告 (層級 2) C4362 | 'type': CLR 不支援大於 8 位元組的對齊 |
| 編譯器警告 (層級 1) C4364 |
#using 組件 'assembly' 先前在 location(line_number) 沒有 as_friend 屬性,因此未套用 as_friend |
| 編譯器警告 (層級 4, 關閉) C4365 | 'expression': 從 'type1' 轉換成 'type2',有符號/無符號類型不匹配 |
| 編譯器警告 (層級 4) C4366 | 一元 'operator' 運算子的結果可能未對齊 |
| 編譯器警告 (層級 3) C4367 | 從 'type1' 轉換為 'type2' 可能會造成資料類型對齊錯誤的例外狀況 |
| 編譯器警告 (層級 1, 錯誤) C4368 | 無法將 'member' 定義為受控 'type' 的成員: 不支援混合類型 |
| 編譯器警告 (層級 1) C4369 | 'enumerator': 列舉值 'value' 無法表示為 'type',值為 'new_value' |
| 編譯器警告 (層級 4,不再發出) C4370 | 'classname': 因為較佳的封裝,舊版編譯器的類別配置已變更 |
| 編譯器警告 (層級 3, 關閉) C4371 | 'classname': 因為成員 'member' 較佳的封裝,舊版編譯器的類別配置可能有變更 |
| 編譯器警告 (層級 4) C4373 | 'function': 虛擬函式覆寫了 'base_class_function',然而在舊版編譯器中,若參數僅在 const/volatile 限定符上有所不同,則不會進行覆寫。 |
| 編譯器警告 (層級 1) C4374 | 'function1': 非虛擬方法 'function2' 將不會實作介面方法 |
| 編譯器警告 (層級 1) C4375 | 非公用方法 'method2' 不會覆寫 'method2' |
| 編譯器警告 (層級 1) C4376 | 不再支援的存取指定子 'specifier1specifier2:',請改用 'new_specifier:'。 |
| 編譯器警告 (層級 1) C4377 | 原生類型預設為私用,-d1PrivateNativeTypes 已被取代 |
| 編譯器警告 (層級 1) C4378 | 必須取得函式指標才能執行初始化函式,請考慮使用 System::ModuleHandle::ResolveMethodHandle |
| 編譯器警告 (層級 1) C4379 | 此編譯器不支援通用語言執行平台的 'version_number' 版本。 使用此版本可能會導致非預期的結果 |
| 編譯器警告 (層級 1, 錯誤) C4380 | 'class': 預設建構函式不能被取代 |
| 編譯器警告 (層級 1) C4381 | 'function1': 非公用方法 'function2' 將不會實作介面方法 |
| 編譯器警告 (層級 1) C4382 | 拋出 'type': 具有 __clrcall 解構函式或拷貝建構函式的類型只能在 /clr:pure 模組中攔截 |
| 編譯器警告 (層級 1) C4383 | 'instance_dereference_operator': 如果有使用者定義的 'instance_dereference_operator' 運算子,控制代碼取值的含意可能會變更,請將這個運算子撰寫成對運算元很明確的靜態函式 |
| 編譯器警告 (層級 1) C4384 |
#pragma 'pragma_name' 只能使用於全域範圍 |
| 編譯器警告 (層級 3) C4387 | 'alternative': 已考慮 |
| 編譯器警告 (層級 4,關閉) C4388 | 'expression': signed/unsigned 不相符 |
| 編譯器警告 (層級 4) C4389 | 'operator': 符號/無符號類型不匹配 |
| 編譯器警告 (層級 3) C4390 | ';': 找到空白的控制陳述式,這是預期內容嗎? |
| 編譯器警告 (層級 1) C4391 | 'function_signature': 內建函式的傳回類型不正確,必須是 'type' |
| 編譯器警告 (層級 1, 錯誤) C4392 | 'function_signature': 內建函式的引數數目不正確,必須有 'argument_count' 個引數 |
| 編譯器警告 (層級 1) C4393 | 'variable': const 對 'literal' 資料成員沒有任何影響,已忽略 |
| 編譯器警告 (層級 1, 錯誤) C4394 | 'function': per-appdomain 符號不可標記為 __declspec(dllexport) |
| 編譯器警告 (層級 1) C4395 | 'function': 成員函式將會在 initonly 資料成員 'member' 的複本上叫用 |
| 編譯器警告 (層級 2) C4396 | 'function' : 當 Friend 宣告參考函式樣板的特製化時,不能使用內嵌規範 |
| 編譯器警告 (層級 1) C4397 | 已忽略 DefaultCharSetAttribute |
| 編譯器警告 (層級 3) C4398 | 'variable': 程序的全域物件在多個 AppDomain 中可能無法正常運作,請考慮使用 __declspec(appdomain) |
| 編譯器警告 (層級 1, 錯誤) C4399 | 'symbol': 用 __declspec( 編譯時,處理序專屬符號不應以 )/clr:pure 標記 |