defined(__alpha)是什么意思?

在代码中看到了#defined(__alpha),后面跟着一些系统设置,不明白__alpha这个宏代表什么。

上网搜了一圈,竟然没找到确切的说明。

后来,发现在2000年一个叫M.L.Y的人写了一个小程序,根据预定义的宏来判断运行环境。仔细一看,原来__alpha是DEC公司出的微处理器。

维基百科上的说明如下:

DEC Alpha

维基百科,自由的百科全书
 
 
DEC Alpha AXP 21064 Microprocessor

Alpha,也称为Alpha AXP,是由迪吉多公司开发的64位RISC指令集架构微处理器。最初由DEC公司制造,并被用于DEC自己的工作站服务器中。作为VAX的后续被开发,支援VMS操作系统,如Digital UNIX。不久之后开放源代码的操作系统也可以在其上运行,如LinuxBSDMicrosoft Windows支持这款处理器,直到Windows NT 4.0 SP6,但是从Windows 2000 beta3开始放弃了对Alpha的支援。

1998年,随着DEC被一起卖给康柏。2001年,被康柏卖给Intel。同年,惠普收购康柏,继续开发基于Alpha处理器的产品到2004年。

原来如此。随着时间的推移,这些已经消失的硬件,也淡出了人们的视野了。

下面是M.L.Y写的小程序,遇到不认识的宏,可以来找找看。

/* CCOS.C --- Test the C language compiler and OS by predefined symbols */ 
/* M.L.Y  2000.12 */ 

#include <stdio.h> 

int  main() 
{ 
#if defined(MSDOS) & defined(_MSC_VER)           /* Microsoft C */ 
  printf("It is MS-DOS, Microsoft C.
"); 
#endif 
#if defined(__MSDOS__) &                         /* Turbo C/BC */     
   (defined(__TURBOC__) | defined(__BORLANDC__)) 
  printf("It is MS-DOS, Borland Turbo C / Borland C++.
"); 
#endif 
#if __hppa & __hp3000s900 & __mpexl              /* HP 3000 */ 
  printf("It is HP 3000, MPE/iX, HP C/iX.
"); 
#endif 
#if vax & VAX & vms & VMS                        /* DEC VAX */        
  & vaxc & VAXC & vax11c & VAX11C                                     
  & defined(vms_version) & defined(VMS_VERSION) 
  printf("It is DEC VAX, VMS, VAX 11 C.
"); 
#endif 
#if __vms & __VMS                                /* DEC Alpha */      
  & __vaxc & __VAXC & __vax11c & __VAX11C                             
  & __DECC & defined(__vms_version) & defined(__VMS_VERSION)          
  & __Alpha_AXP & __Alpha & __ALPHA & __32BITS 
  printf("It is DEC Alpha AXP, Open VMS, DEC C.
"); 
#endif 
#if __OS400__                                    /* AS/400 */ 
  printf("It is AS/400, OS/400.
"); 
#endif 
#if mips & __mips & host_mips & __host_mips      /* Tandem */         
  & unix & __unix & __nonstopux                                       
  & SYSTYPE_SVR4 & _SYSTYPE_SVR4 & LANGUAGE_C & _LANGUAGE_C 
  printf("It is Tandem(puma S4000 mips,...), NonStop-UX/V(Rel4.2MP,...).
"); 
#endif 
#if (hp9000s200 | hp9000s300 | __hp9000s300      /* HP 9000 */        
   | hp9000s500 | hp9000s800 | __hp9000s800 | hp9000ipc)              
   & (hppa | __hppa) & (_PA_RISC1_0 | _PA_RISC1_1)                    
   & (unix | __unix) & (hpux | __hpux) 
  printf("It is HP 9000, HP-UX.
"); 
#endif 
#if i386 & M_I386 & unix & __unix & M_UNIX       /* SCO UNIX */       
  & (_SCO_COFF | _SCO_ELF) 
  printf("It is SCO UNIX(SCO OpenServer) on Intel 386 or above.
"); 
#endif 
#if i386 & _I386 & unix & __HIGHC__ & _ATT4      /* NCR UNIX */ 
  printf("It is NCR MP-RAS SVR4 UNIX System on Intel 386 or above.
"); 
#endif 
  return 0; 
} 

/* End of file */ 


原文地址:https://www.cnblogs.com/sirlipeng/p/4424916.html