Microsoft C/C++ compiler warnings C4200 through C4399

The articles in this section describe Microsoft C/C++ compiler warning messages C4200 through C4399.

Important

The Visual Studio compilers and build tools can report many kinds of errors and warnings. After an error or warning is found, the build tools may make assumptions about code intent and attempt to continue, so that more issues can be reported at the same time. If the tools make the wrong assumption, later errors or warnings may not apply to your project. When you correct issues in your project, always start with the first error or warning that's reported, and rebuild often. One fix may make many subsequent errors go away.

To get help on a particular diagnostic message in Visual Studio, select it in the Output window and press the F1 key. Visual Studio opens the documentation page for that error, if one exists. You can also use the search tool at the top of the page to find articles about specific errors or warnings. Or, browse the list of errors and warnings by tool and type in the table of contents on this page.

Note

Not every Visual Studio error or warning is documented. In many cases, the diagnostic message provides all of the information that's available. If you landed on this page when you used F1 and you think the error or warning message needs additional explanation, let us know. You can use the feedback buttons on this page to raise a documentation issue on GitHub. If you think the error or warning is wrong, or you've found another problem with the toolset, report a product issue on the Developer Community site. You can also send feedback and enter bugs within the IDE. In Visual Studio, go to the menu bar and choose Help > Send Feedback > Report a Problem, or submit a suggestion by using Help > Send Feedback > Send a Suggestion.

You may find additional assistance for errors and warnings in Microsoft Learn Q&A forums. Or, search for the error or warning number on the Visual Studio C++ Developer Community site. You can also search Stack Overflow to find solutions.

For links to additional help and community resources, see Visual C++ Help and Community.

Warning messages

Warning Message
Compiler warning (level 2 and level 4) C4200 nonstandard extension used: zero-sized array in struct/union
Compiler warning (level 4) C4201 nonstandard extension used: nameless struct/union
Compiler warning (level 4) C4202 nonstandard extension used: '...': prototype parameter in name list illegal
Compiler warning C4203 nonstandard extension used: union with static member variable
Compiler warning (level 4) C4204 nonstandard extension used: non-constant aggregate initializer
Compiler warning (level 4) C4205 nonstandard extension used: static function declaration in function scope
Compiler warning (level 4) C4206 nonstandard extension used: translation unit is empty
Compiler warning (level 4) C4207 nonstandard extension used: extended initializer form
Compiler warning (level 4) C4208 nonstandard extension used: delete [exp] - exp evaluated but ignored
Compiler warning (level 4) C4210 nonstandard extension used: function given file scope
Compiler warning (level 4) C4211 nonstandard extension used: redefined extern to static
Compiler warning (level 4) C4212 nonstandard extension used: function declaration used ellipsis
Compiler warning (level 4) C4213 nonstandard extension used: cast on l-value
Compiler warning (level 4) C4214 nonstandard extension used: bit field types other than int
Compiler warning (level 1) C4215 nonstandard extension used: long float
Compiler warning (level 1) C4216 nonstandard extension used: float long
Compiler warning (level 4) C4218 nonstandard extension used: must specify at least a storage class or a type
Compiler warning (level 4) C4220 varargs matches remaining parameters
Compiler warning (level 4) C4221 nonstandard extension used: 'identifier': cannot be initialized using address of automatic variable 'variable'
Compiler warning (level 1 and level 4) C4223 nonstandard extension used: non-lvalue array converted to pointer
Compiler warning (level 1) C4224 nonstandard extension used: formal parameter 'identifier' was previously defined as a type
Compiler warning (level 1, Error) C4226 nonstandard extension used: 'keyword' is an obsolete keyword
Compiler warning (level 1) C4227 anachronism used: qualifiers on reference are ignored
Compiler warning (level 1) C4228 nonstandard extension used: qualifiers after comma in declarator list are ignored
Compiler warning (level 1, Error) C4229 anachronism used: modifiers on data are ignored
Compiler warning (level 1) C4230 anachronism used: modifiers/qualifiers interspersed; qualifier ignored
Compiler warning (level 4) C4232 nonstandard extension used: 'identifier': address of dllimport 'dllimport' is not static, identity not guaranteed
Compiler warning (level 1, Error) C4233 nonstandard extension used: 'keyword' keyword only supported in C++, not C
Compiler warning (level 4, Error) C4234 nonstandard extension used: 'keyword' keyword reserved for future use
Compiler warning (level 1, Error) C4235 nonstandard extension used: 'keyword' keyword not supported on this architecture
Compiler warning (level 1) C4237 'keyword' keyword is not yet supported, but reserved for future use
Compiler warning (level 4) C4238 nonstandard extension used: class rvalue used as lvalue
Compiler warning (level 4) C4239 nonstandard extension used: 'token': conversion from 'type1' to 'type2'
Compiler warning (level 3) C4240 nonstandard extension used: access to 'classname' now defined to be 'access_specifier1', previously it was defined to be 'access_specifier2'
Compiler warning (level 3, off) C4242 'identifier': conversion from 'type1' to 'type2', possible loss of data
Compiler warning (level 3) C4243 conversion_type conversion from 'type1' to 'type2' exists, but is inaccessible
Compiler warning (level 2) C4244 'conversion_type': conversion from 'type1' to 'type2', possible loss of data
Compiler warning (level 2 and level 3 and level 4) C4244 'conversion_type': conversion from 'type1' to 'type2', possible loss of data
Compiler warning (level 4) C4245 'conversion_type': conversion from 'type1' to 'type2', signed/unsigned mismatch
Compiler warning (level 2) C4250 'classname': inherits 'base_classname::member' via dominance
Compiler warning (level 2) C4251 'object_type1': 'identifier1' needs to have dll-interface to be used by clients of 'identfier2'
Compiler warning (level 4, off) C4254 'operator': conversion from 'type1':'field_bits' to 'type2':'field_bits', possible loss of data
Compiler warning (level 4, off) C4255 'function': no function prototype given: converting '()' to '(void)'
Compiler warning (level 4) C4256 'function': constructor for class with virtual bases has '...'; calls may not be compatible with older versions of Visual C++
Compiler warning (level 1) C4258 'variable': definition from the for loop is ignored; the definition from the enclosing scope is used
Compiler warning (level 4, off) C4263 'function': member function does not override any base class virtual member function
Compiler warning (level 4, off) C4264 'virtual_function': no override available for virtual member function from base 'classname'; function is hidden
Compiler warning (level 3, off) C4265 'classname': class has virtual functions, but its non-trivial destructor is not virtual; instances of this class may not be destructed correctly
Compiler warning (level 4, off) C4266 'virtual_function': no override available for virtual member function from base 'classname'; function is hidden
Compiler warning (level 3) C4267 'variable': conversion from 'size_t' to 'type', possible loss of data
Compiler warning (level 4) C4268 'identifier': 'const' static/global data initialized with compiler generated default constructor fills the object with zeros
Compiler warning (level 1) C4269 'identifier': 'const' automatic data initialized with compiler generated default constructor produces unreliable results
Compiler warning (level 1) C4272 'function': is marked __declspec(dllimport); must specify native calling convention when importing a function.
Compiler warning (level 1) C4273 'function': inconsistent dll linkage
Compiler warning (level 1) C4274 #ident ignored; see documentation for #pragma comment(exestr, 'string')
Compiler warning (level 2) C4275 non dll-interface classkey 'identifier1' used as base for dll-interface classkey 'identifier2'
Compiler warning (level 1) C4276 'function': no prototype provided; assumed no parameters
Compiler warning (level 1) C4277 imported item 'classname::member' exists as both data member and function member; data member ignored
Compiler warning (level 3 and level 4) C4278 'identifier': identifier in type library 'library' is already a macro; use the 'rename' qualifier
Compiler warning (level 3 and level 4) C4279 'identifier': identifier in type library 'library' is a keyword; use the 'rename' qualifier
Compiler warning (level 3) C4280 'operator ->' was self recursive through type 'type'
Compiler warning (level 3) C4281 'operator ->' recursion occurred through type 'type1'
Compiler warning (level 3) C4282 then through type 'type2'
Compiler warning (level 3) C4283 and through type 'typeN'
Compiler warning (level 2) C4285 return type for 'identifier::operator ->' is recursive if applied using infix notation
Compiler warning (level 1) C4286 'derived_type': is caught by base class ('base_type') on line line_number
Compiler warning (level 3, off) C4287 'operator': unsigned/negative constant mismatch
Compiler warning (level 1) C4288 nonstandard extension used: 'variable': loop control variable declared in the for-loop is used outside the for-loop scope; it conflicts with the declaration in the outer scope
Compiler warning (level 4, off) C4289 nonstandard extension used: 'variable': loop control variable declared in the for-loop is used outside the for-loop scope
Compiler warning (level 3) C4290 C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
Compiler warning (level 1) C4291 'declaration': no matching operator delete found; memory will not be freed if initialization throws an exception
Compiler warning (level 1) C4293 'shift_operator': shift count negative or too big, undefined behavior
Compiler warning (level 4) C4295 'array': array is too small to include a terminating null character
Compiler warning (level 4, off) C4296 'operator': expression is always boolean_value
Compiler warning (level 1) C4297 'function': function assumed not to throw an exception but does
Compiler warning (level 4) C4298 'identifier': identifier in type library 'library' is already a macro; renaming to '__identifier'
Compiler warning (level 4) C4299 'identifier': identifier in type library 'library' is a keyword; renaming to '__identifier'
Compiler warning C4301 'derived_class::function': overriding virtual function only differs from 'base_class::function' by const/volatile qualifier
Compiler warning (level 2) C4302 'conversion': truncation from 'type1' to 'type2'
Compiler warning (no longer emitted) C4303 C-style cast from 'type1' to 'type2' is deprecated, use static_cast, __try_cast or dynamic_cast
Compiler warning (level 1 and level 2 and level 4) C4305 'conversion': truncation from 'type1' to 'type2'
Compiler warning (level 4) C4306 'conversion': conversion from 'type1' to 'type2' of greater size
Compiler warning (level 2) C4307 'operator': signed integral constant overflow
Compiler warning (level 2) C4308 negative integral constant converted to unsigned type
Compiler warning (level 2) C4309 'conversion': truncation of constant value
Compiler warning (level 4) C4310 cast truncates constant value
Compiler warning (level 1) C4311 'variable': pointer truncation from 'type1' to 'type2'
Compiler warning (level 1) C4312 'operation': conversion from 'type1' to 'type2' of greater size
Compiler warning (level 1) C4313 'function': '%format_specifier' in format string conflicts with argument argument_number of type 'type'
Compiler warning C4314 expected pragma parameter to be '32' or '64'
Compiler warning (level 4) C4315 'classname': 'this' pointer for member 'member' may not be aligned alignment as expected by the constructor
Compiler warning (level 3) C4316 'identifier': object allocated on the heap may not be aligned alignment
Compiler warning (level 1) C4317 'printf_family' : not enough arguments passed for format string
Compiler warning C4318 passing constant zero as the length to memset
Compiler warning (level 1) C4319 'operator': zero extending 'type1' to 'type2' of greater size
Compiler warning (level 1) C4321 automatically generating an IID for interface 'interface'
Compiler warning (level 1) C4322 automatically generating a CLSID for class 'class'
Compiler warning (level 1) C4323 re-using registered CLSID for class 'class'
Compiler warning (level 4) C4324 'structname': structure was padded due to alignment specifier
Compiler warning (level 1) C4325 attributes for standard section 'section' ignored
Compiler warning (level 1) C4326 return type of 'function' should be 'type1' instead of 'type2'
Compiler warning C4327 'assignment': indirection alignment of LHS ('alignment1') is greater than RHS ('alignment2')
Compiler warning C4328 'function': indirection alignment of formal parameter parameter_number (parameter_alignment) is greater than the actual argument alignment (argument_alignment)
Compiler warning (level 1) C4329 alignment specifier is ignored on enum
Compiler warning (level 1) C4330 attribute 'attribute' for section 'section' ignored
Compiler warning (level 1) C4333 'shift_operator': right shift by too large amount, data loss
Compiler warning (level 3) C4334 'shift_operator': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)
Compiler warning (level 1) C4335 Mac file format detected: please convert the source file to either DOS or UNIX format
Compiler warning (level 4) C4336 import cross-referenced type library 'library1' before importing 'library2'
Compiler warning (level 4) C4337 cross-referenced type library 'library1' in 'library2' is being automatically imported
Compiler warning (level 4) C4338 #pragma directive: standard section 'section' is used
Compiler warning (level 4, off) C4339 'type': use of undefined type detected in 'WinRT|CLR' meta-data - use of this type may lead to a runtime exception
Compiler warning (level 1) C4340 'value': value wrapped from positive to negative value
Compiler warning (level 1, off, no longer emitted) C4342 behavior change: 'function' called, but a member operator was called in previous versions
Compiler warning (level 4) C4343 #pragma optimize("g",off) overrides /Og option
Compiler warning (level 1) C4344 behavior change: use of explicit template arguments results in call to 'function'
Compiler warning (level 1) C4346 'name': dependent name is not a type
Compiler warning (level 1) C4348 'type': redefinition of default parameter: parameter parameter_number
Compiler warning (level 1, off, no longer emitted) C4350 behavior change: 'member1' called instead of 'member2'
Compiler warning (level 1) C4352 'identifier': intrinsic function already defined
Compiler warning (level 1) C4353 nonstandard extension used: constant 0 as function expression. Use '__noop' function intrinsic instead
Compiler warning (level 1 and level 4, off) C4355Compiler warning (level 1 and level 4) C4355 'this': used in base member initializer list
Compiler warning (level 2) C4356 'member': static data member cannot be initialized via derived class
Compiler warning (level 3) C4357 param array argument found in formal argument list for delegate 'delegate' ignored when generating 'function'
Compiler warning (level 1) C4358 'operator': return type of combined delegates is not 'void'; returned value is undefined
Compiler warning (level 1 and level 3) C4359 'type': Alignment specifier is less than actual alignment (alignment), and will be ignored.
Compiler warning (level 2) C4362 'type': alignment greater than 8 bytes is not supported by CLR
Compiler warning (level 1) C4364 #using for assembly 'assembly' previously seen at location(line_number) without as_friend attribute; as_friend not applied
Compiler warning (level 4, off) C4365 'expression': conversion from 'type1' to 'type2', signed/unsigned mismatch
Compiler warning (level 4) C4366 The result of the unary 'operator' operator may be unaligned
Compiler warning (level 3) C4367 Conversion from 'type1' to 'type2' may cause datatype misalignment exception
Compiler warning (level 1, Error) C4368 cannot define 'member' as a member of managed 'type': mixed types are not supported
Compiler warning (level 1) C4369 'enumerator': enumerator value 'value' cannot be represented as 'type', value is 'new_value'
Compiler warning (level 4, no longer emitted) C4370 'classname': layout of class has changed from a previous version of the compiler due to better packing
Compiler warning (level 3, off) C4371 'classname': layout of class may have changed from a previous version of the compiler due to better packing of member 'member'
Compiler warning (level 4) C4373 'function': virtual function overrides 'base_class_function', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers
Compiler warning (level 1) C4374 'function1': interface method will not be implemented by non-virtual method 'function2'
Compiler warning (level 1) C4375 non-public method 'method2' does not override 'method2'
Compiler warning (level 1) C4376 access specifier 'specifier1 specifier2:' is no longer supported: please use 'new_specifier:' instead
Compiler warning (level 1) C4377 native types are private by default; -d1PrivateNativeTypes is deprecated
Compiler warning (level 1) C4378 Must obtain function pointers to run initializers; consider System::ModuleHandle::ResolveMethodHandle
Compiler warning (level 1) C4379 Version 'version_number' of the common language runtime is not supported by this compiler. Using this version may cause unexpected results
Compiler warning (level 1, Error) C4380 'class': A default constructor cannot be deprecated
Compiler warning (level 1) C4381 'function1': interface method will not be implemented by non-public method 'function2'
Compiler warning (level 1) C4382 throwing 'type': a type with __clrcall destructor or copy constructor can only be caught in /clr:pure module
Compiler warning (level 1) C4383 'instance_dereference_operator': the meaning of dereferencing a handle can change, when a user-defined 'instance_dereference_operator' operator exists; write the operator as a static function to be explicit about the operand
Compiler warning (level 1) C4384 #pragma 'pragma_name' should only be used at global scope
Compiler warning (level 3) C4387 'alternative': was considered
Compiler warning (level 4, off) C4388) 'expression': signed/unsigned mismatch
Compiler warning (level 4) C4389 'operator': signed/unsigned mismatch
Compiler warning (level 3) C4390 ';': empty controlled statement found; is this the intent?
Compiler warning (level 1) C4391 'function_signature': incorrect return type for intrinsic function, expected 'type'
Compiler warning (level 1, Error) C4392 'function_signature': incorrect number of arguments for intrinsic function, expected 'argument_count' arguments
Compiler warning (level 1) C4393 'variable': const has no effect on literal data member; ignored
Compiler warning (level 1, Error) C4394 'function': per-appdomain symbol should not be marked with __declspec(dllexport)
Compiler warning (level 1) C4395 'function': member function will be invoked on a copy of the initonly data member 'member'
Compiler warning (level 2) C4396 'function': the inline specifier cannot be used when a friend declaration refers to a specialization of a function template
Compiler warning (level 1) C4397 DefaultCharSetAttribute is ignored
Compiler warning (level 3) C4398 'variable': per-process global object might not work correctly with multiple appdomains; consider using __declspec(appdomain)
Compiler warning (level 1, Error) C4399 'symbol': per-process symbol should not be marked with __declspec(dllimport) when compiled with /clr:pure

See also

C/C++ Compiler and build tools errors and warnings
Compiler warnings C4000 - C5999