Geoff Chappell - Software Analyst
/wdnumber
The required argument consists of whatever follows immediately within the same command-line token, else is the whole of the next command-line token if this token does not begin with a hyphen or forward slash.
The argument is formally numeric. Values outside the range 4001 to 4999 inclusive are coerced to 4999, with a warning (D4014).
The /wd option has no syntactical relations with other options.
This option passes to the front-end C and C++ compilers (C1 and C1XX) only.
This option disables the given warning number. If the condition associated with the warning occurs, its detection is not reported as a warning.
This option is ineffective for warning C4200. All C and C++ source files, even if empty, are compiled with a forced inclusion at the very start. This “file” of predefined types is hard-coded into the compiler. Some of these types have unsized arrays as members. Each instance is preceded by #pragma warning (disable : 4200) and followed by #pragma warning (default : 4200). This is arguably pointless, since the compiler disables warnings and errors (though not fatal errors) while processing this built-in inclusion, but a side-effect is that when the compiler progresses to the user-supplied source code, warning C4200 has already been set to its default behaviour. Whatever may have been intended by giving 4200 as the argument to a /w1, /w2, /w3, /w4, /wd, /we or /wo option on the command line is then irrelevant, essentially as if #pragma warning (default : 4200) had been the first line of the source file.
Some warning numbers are ordinarily disabled, as if the corresponding /wd option were generated internally before acting on any options from the command line. For instance, the following table shows the warnings that the front-end C++ compiler (C1XX) disables automatically, unless prevented by the /Wall option. A few of these seem to be undocumented and are highlighted yellow.
C4061 | enumerate 'identifier' in switch of enum 'enumeration' is not explicitly handled by a case label |
C4062 | enumerate 'identifier' in switch of enum 'enumeration' is not handled |
C4191 | 'operator/operation' : unsafe conversion
from 'type of expression' to 'type
required' Calling this function through the result pointer may cause your program to fail |
C4217 | 'operator' : member template functions cannot be used for copy-assignment or copy-construction |
C4242 | 'identifier' : conversion from 'type1' to 'type2', possible loss of data |
C4254 | 'operator' : conversion from 'type1':'bits' to 'type2':'bits', possible loss of data |
C4255 | 'function' : no function prototype given: converting '()' to '(void)' |
C4263 | 'function' : member function does not override any base class virtual member function |
C4264 | 'virtual_function' : no override available for virtual member function from base 'class'; function is hidden |
C4265 | 'class' : class has virtual functions,
but destructor is not virtual instances of this class may not be destructed correctly |
C4287 | 'operator' : unsigned/negative constant mismatch |
C4289 | nonstandard extension used : 'var' : loop control variable declared in the for-loop is used outside the for-loop scope |
C4296 | 'operator' : expression is always value |
C4302 | 'conversion' : truncation from 'type1' to 'type2' |
C4339 | 'type' : use of undefined type detected in CLR meta-data - use of this type may lead to a runtime exception |
C4370 | '%$pS' : layout of class has changed from a previous version of the compiler due to better packing |
C4371 | '%$pS' : layout of class may have changed from a previous version of the compiler due to better packing of member '%$S' |
C4372 | '%$pS' : calling convention for UDT return value has changed from a previous version of the compiler |
C4373 | '%$S': virtual function overrides '%$pS', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers |
C4444 | '%$I' : top level '__unaligned' is not implemented in this context |
C4514 | 'function' : unreferenced inline function has been removed |
C4529 | 'member_name' : forming a pointer-to-member requires explicit use of the address-of operator ('&') and a qualified name |
C4536 | 'type name' : type-name exceeds meta-data limit of 'limit' characters |
C4555 | expression has no effect; expected expression with side-effect |
C4557 | '__assume' contains effect '%$L' |
C4619 | #pragma warning : there is no warning number 'number' |
C4623 | 'derived class' : default constructor could not be generated because a base class default constructor is inaccessible |
C4625 | 'derived class' : copy constructor could not be generated because a base class copy constructor is inaccessible |
C4626 | 'derived class' : assignment operator could not be generated because a base class assignment operator is inaccessible |
C4640 | 'instance' : construction of local static object is not thread-safe |
C4668 | 'symbol' is not defined as a preprocessor macro, replacing with '0' for 'directives' |
C4682 | 'parameter' : no directional parameter attribute specified, defaulting to [in] |
C4710 | 'function' : function not inlined |
C4786 | 'identifer' : identifier was truncated to 'number' characters in the debug/browser information |
C4793 | native code generated for 'attribute' function 'function' |
C4820 | 'identifier' : 'bytes' bytes padding added after member 'member' |
C4905 | wide string literal cast to 'type' |
C4906 | string literal cast to 'type' |
C4917 | 'declarator' : a GUID can only be associated with a class, interface or namespace |
C4928 | illegal copy-initialization; more than one user-defined conversion has been implicitly applied |
C4931 | we are assuming the type library was built for number-bit pointers |
C4946 | reinterpret_cast used between related classes: 'class1' and 'class2' |