PRB: Compiler Lacks Warnings for Options Incompatible with /u (68385)



The information in this article applies to:

  • Microsoft C for MS-DOS
  • Microsoft Visual C++ for Windows, 16-bit edition 1.0
  • Microsoft Visual C++ for Windows, 16-bit edition 1.5
  • Microsoft Visual C++ for Windows, 16-bit edition 1.51
  • Microsoft Visual C++ for Windows, 16-bit edition 1.52
  • Microsoft Visual C++, 32-bit Editions 1.0
  • Microsoft Visual C++, 32-bit Editions 2.0
  • Microsoft Visual C++, 32-bit Editions 2.1
  • Microsoft Visual C++, 32-bit Editions 4.0
  • Microsoft Visual C++, 32-bit Editions 5.0

This article was previously published under Q68385

SYMPTOMS

In the Microsoft C/C++ compiler, the /u compiler option turns off the definition of all predefined identifiers. Therefore, other compiler options that implicitly define identifiers are incompatible with /u. Nevertheless, no warnings or errors are generated if an option incompatible with /u is specified.

For example, the /J option changes the default char type from signed char to unsigned char and implicitly defines the macro _CHAR_UNSIGNED. If both /u and /J are specified on the same command line, the default char type for that translation unit will be unsigned char but _CHAR_UNSIGNED will not be defined. Moreover, the compiler issues no warning, not even at warning level 4, that /u will undefine those macros defined by /J.

CAUSE

This is expected behavior. The /U (undefine) option turns off the definition of an single identifier already defined for the preprocessor. The /u option turns off every defined identifier. Both the /U and /u options apply to predefined names and user defined ones.

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbCompiler kbprb KB68385