I: gcc ... -U_WIN32 ... may cause problems

Larry Hall (RFK Partners Inc) lhall@rfk.com
Sat Sep 5 00:23:00 GMT 1998


At 03:23 PM 9/2/98 -0500, Mumit Khan wrote:
>"Larry Hall (RFK Partners Inc)" <lhall@rfk.com> writes:
>> The best argument I have for getting rid of _WIN32 from cygwin and mingw is 
>> that MS docs claim _WIN32 is MS compiler specific.  
>
>As far as I know, _MSC_VER, not _WIN32, is the microsoft-compiler specific 
>macro. A quick look at some of the microsoft's headers, eg., pshpack1.h,
>suggests the same as well. My *rather old* on-line API docs here tell me 
>that _WIN32 is specific to Microsoft Windows Operating System. Please cite 
>the docs you mentiond so I can verify.
>

Below is documentation that comes with VC++ 5.0.  See table 1.2 for 
Microsoft specific predefined macros.


--------------------------------------------------------------------------

Predefined Macros

The compiler recognizes six predefined ANSI C macros (see Table 1.1), and the Microsoft C++ implementation provides several more (see Table 1.2). These macros take no arguments and cannot be redefined. Their value (except for __LINE__ and __FILE__) must be constant throughout compilation. Some of the predefined macros listed below are defined with multiple values. Their values can be set by selecting the corresponding menu option in Microsoft Developer Studio, or by using a command-line switch. See the tables below for more information.

Table 1.1 ANSI Predefined Macros





Macro



Description





__DATE__



The compilation date of the current source file. The date is a string literal of the form Mmm dd yyyy. The month name Mmm is the same as for dates generated by the library function asctime declared in TIME.H. 



__FILE__



The name of the current source file. __FILE__ expands to a string surrounded by double quotation marks. 



__LINE__



The line number in the current source file. The line number is a decimal integer constant. It can be altered with a #line directive. 



__STDC__



Indicates full conformance with the ANSI C standard. Defined as the integer constant 1 only if the /Za compiler option is given and you are not compiling C++ code; otherwise is undefined. 



__TIME__



The most recent compilation time of the current source file. The time is a string literal of the form hh:mm:ss. 



__TIMESTAMP__



The date and time of the last modification of the current source file, expressed as a string literal in the form Ddd Mmm Date hh:mm:ss yyyy, where Ddd is the abbreviated day of the week and Date is an integer from 1 to 31.








Table 1.2 Microsoft-Specific Predefined Macros 





Macro



Description





_CHAR_UNSIGNED



Default char type is unsigned. Defined when /J is specified. 



__cplusplus



Defined for C++ programs only.



_CPPRTTI



Defined for code compiled with /GR (Enable Run-Time Type Information).



_CPPUNWIND



Defined for code compiled with /GX (Enable Exception Handling).



_DLL



Defined when /MD or /MDd (Multithread DLL) is specified.



_M_ALPHA



Defined for DEC ALPHA platforms. It is defined as 1 by the ALPHA compiler, and it is not defined if another compiler is used.



_M_IX86



Defined for x86 processors. See Table 1.3 for more details.



_M_MPPC



Defined for Power Macintosh platforms. Default is 601 (/QP601). See Table 1.4 for more details.



_M_MRX000



Defined for MIPS platforms. Default is 4000 (/QMR4000). See Table 1.5 for more details.



_M_PPC



Defined for PowerPC platforms. Default is 604 (/QP604). See Table 1.6 for more details.



_MFC_VER



Defines the MFC version. Defined as 0x0421 for Microsoft Foundation Class Library 4.21. Always defined.



_MSC_VER



Defines the compiler version. Defined as 1100 for Microsoft Visual C++™ 5.0. Always defined.



_MT



Defined when /MD or /MDd (Multithreaded DLL) or /MT or /MTd (Multithreaded) is specified. 



_WIN32



Defined for applications for Win32®. Always defined. 




As shown in following tables, the compiler generates a value for the preprocessor identifiers that reflect the processor option specified.



Table 1.3 Values for _M_IX86





Option in Developer Studio



Command-Line Option



Resulting Value





Blend



/GB



_M_IX86 = 500 (Default. Future compilers will emit a different value to reflect the dominant processor.)



Pentium



/G5



_M_IX86 = 500



Pentium Pro



/G6



_M_IX86 = 600



80386



/G3



_M_IX86 = 300



80486



/G4



_M_IX86 = 400








Table 1.4 Values for _M_MPPC





Option in development environment



Command-Line Option



Resulting Value





PowerPC 601



/QP601



_M_MPPC = 601 (Default)



PowerPC 603



/QP603



_M_MPPC = 603



PowerPC 604



/QP604



_M_MPPC = 604



PowerPC 620



/QP620



_M_MPPC = 620








Table 1.5 Values for _M_MRX000





Option in Developer Studio



Command-Line Option



Resulting Value





R4000



/QMR4000



_M_MRX000 = 4000 (Default)



R4100



/QMR4100



_M_MRX000 = 4100



R4200



/QMR4200



_M_MRX000 = 4200



R4400



/QMR4400



_M_MRX000 = 4400



R4600



/QMR4600



_M_MRX000 = 4600



R10000



/QMR10000



_M_MRX000 = 10000








Table 1.6 Values for _M_PPC





Option in Developer Studio



Command-Line Option



Resulting Value





PowerPC 601



/QP601



_M_PPC = 601



PowerPC 603



/QP603



_M_PPC = 603



PowerPC 604



/QP604



_M_PPC = 604 (Default)



PowerPC 620



/QP620



_M_PPC = 620
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".



More information about the Cygwin mailing list