共用方式為


Microsoft C/C++ 編譯器警告 C4200 到 C4399

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

重要

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++ 說明與社群 (部分機器翻譯)。

警告訊息

警告 訊息
編譯器警告 (層級 2 和層級 4) C4200 使用非標準擴充: 結構/聯合中大小為零的陣列
編譯器警告 (層級 4) C4201 使用非標準的擴充: 沒有名稱的 struct/union
編譯器警告 (層級 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 'object_type1': 'identifier1' 必須有 dll 介面供 'identfier2' 的用戶端使用
編譯器警告 (層級 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 'identifier2' 基底使用非 dll 介面 classkey 'identifier1'
編譯器警告 (層級 1) C4276 'function': 未提供原型; 假設沒有參數
編譯器警告 (層級 1) C4277 匯入的項目 'classname::member' 以資料成員和函式成員的方式同時存在; 已忽略資料成員
編譯器警告 (層級 3 和層級 4) C4278 'identifier': 類型程式庫 'library' 中的識別項已經是巨集; 使用 'rename' 限定詞
編譯器警告 (層級 3 和層級 4) C4279 'identifier': 類型程式庫 'library' 中的識別項是關鍵字; 使用 'rename' 限定詞
編譯器警告 (層級 3) C4280 透過類型 'type',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 'conversion': 從 'type1' 到 'type2' 發生截斷狀況
編譯程式警告 (不再發出) C4303 從 'type1' 到 'type2' 的 C 樣式轉換已過時,使用 static_cast__try_castdynamic_cast
編譯器警告 (層級 1 和層級 2 和層級 4) C4305 'conversion': 從 'type1' 到 'type2' 發生截斷狀況
編譯器警告 (層級 4) C4306 'conversion': 將 'type1' 轉換為較大的 'type2'
編譯器警告 (層級 2) C4307 'operator': 帶正負號的整數常數溢位
編譯器警告 (層級 2) C4308 將負整數常數轉換為 unsigned 類型
編譯器警告 (層級 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 匯入交互參考類型程式庫 'library1' 早於匯入 'library2'
編譯器警告 (層級 4) C4337 已自動匯入 'library2' 中的交互參考類型程式庫 'library1'
編譯器警告 (層級 4) C4338 #pragma 指示詞: 使用標準區段 'section'
編譯器警告 (層級 4, 關閉) C4339 'type': 偵測到在 '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編譯器警告 (層級 1 和層級 4) C4355 'this': 在基底成員初始設定式清單中使用
編譯器警告 (層級 2) C4356 'member': 無法透過衍生類別初始化靜態資料成員
編譯器警告 (層級 3) C4357 產生 'function' 時,忽略了於委派 'delegate' 的型式引數清單中找到的 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 不再支援 access 指定名稱 'specifier1 specifier2:' 請改用 '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': signed/unsigned 不相符
編譯器警告 (層級 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': 用 /clr:pure 編譯時,處理序專屬符號不應以 __declspec(dllimport) 標記

另請參閱

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