c开发/oc开发 系统常用宏

本文详细列举了C/C++开发中常用的预定义宏,并介绍了它们的功能与应用场景。此外,还提供了iOS开发中实用的宏定义,帮助开发者更好地理解和使用这些宏来提升开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


C开发之----预定义宏大全

from:http://blog.sina.com.cn/s/blog_71715bf80101aamm.html

符合ANSI的预定义宏: 

__DATE__:表示当前源文件编译时的日期,格式为:月/天/年(Mmm dd yyyy)。

__FILE__:表示当前正在处理的源文件名称。

__LINE__:表示当前正在处理的源文件的行,可以用#line指令修改。

__STDC__:表示是ANSI C标准。只有在编译器选项指定了/Za,并且不是编译C++程序时,被定义为常整数1;否则未定义。

__TIME__:表示当前源文件的最近编译时的时间,格式为:小时/分/秒(hh:mm:ss)。

__TIMESTAMP__:表示当前源文件的最近修改日期和时间,格式为:Ddd Mmm dd hh:mm:ss yyyy,其中Ddd是星期的缩写。

 

Microsoft相关的宏:

 

_ATL_VER:定义了ATL的版本。

_CHAR_UNSIGNED:设置默认的char类型是unsigned的。只有在编译器选项/J指定时才有定义。

__CLR_VER:指定了应用程序编译时的通用语言运行时(CLR)的版本。格式为:Mmmbbbbb,其中M是CLR的主版本,mm是CLR的次版本,bbbbb是build号。

__cplusplus_cli:只有在用/clr,/clr:pure或/clr:safe编译时才有定义。__cplusplus_cli的值是200406。

__COUNTER__:为一个整数,从0开始,每出现一次,其值增加1。可以使用__COUNTER__作为前缀来产生唯一的名字。

__cplusplus只有在编译C++程序时才有定义,一般用于区分C程序和C++程序。

_CPPLIB_VER:在程序中如果包含了任意C++标准库头文件,则_CPPLIB_VER有定义。用于显示正在使用的头文件的版本。

_CPPRTTI:用于标识编译器是否指定了RTTI。如果编译器选项中设定了/GR(打开运行时类型信息机制-RTTI),则_CPPRTTI有定义。

_CPPUNWIND:用于标识编译器是否打开异常处理。如果编译器选项中设定了/GX,则_CPPRTTI有定义。

_DEBUG:用于标识是Debug模式。在编译器指定了/LDd,/MDd或/MTd时才有定义。

_DLL:当编译器选项指定了/MD或/MDd(Multithread DLL)时才有定义。

__FUNCDNAME__:只有在函数内部才有效。返回该函数经编译器修饰后的名字。如果编译器选项中设定了/EP或/P,则__FUNCDNAME__是未定义。

__FUNCSIG__:只有在函数内部才有效,并且返回该函数的签名。一个函数的签名由函数名、参数列表、返回类型、内含的命名空间组成。如果它是一个成员函数,它的类名和const/volatile限定符也将是签名的一部分。在64位操作系统中,__cdecl是默认的函数调用方式。如果编译器选项中设定了/EP或/P,则__FUNCSIG__是未定义。

__FUNCTION__:只有在函数内部才有效。返回该函数未经修饰的名字。如果编译器选项中设定了/EP或/P,则__FUNCTION__是未定义。

_INTEGRAL_MAX_BITS:表示整数类型的最大位数(bits)。

_M_ALPHA:为DEC ALPHA平台定义。(现在已不支持)

_M_CEE:当使用/clr的任意形式(/clr:oldSyntax, 例如/clr:safe)编译时被定义。

_M_CEE_PURE:当使用/clr:pure编译时被定义。

_M_CEE_SAFE:当使用/clr:safe编译时被定义。

_M_IX86:为x86处理器架构定义。当值为300时说明是80386,值是400时说明是80486

_M_IA64:为Itanium处理器家族的64位处理器(IA64)架构定义。

_M_IX86_FP:表示编译器选项/arch的值。0:/arch未指定;1:指定/arch:SSE;2:指定/arch:SSE2

_M_MPPC:为Power Macintosh平台定义。(现在已不支持)

_M_MRX000:为MIPS平台定义。(现在已不支持)

_M_PPC:为PowerPC平台定义。(现在已不支持)

_M_X64:为x64处理器架构定义。

_MANAGED:当编译器选项指定/clr时定义,其值为1。

_MFC_VER:指定MFC版本。例如:0x0700表示MFC version 7。

_MSC_BUILD:表示编译器版本号的修订号部分。修订号是以时期进行分割的版本号的第四部分。例如:如果VC++编译器的版本号是15.00.20706.01,则_MSC_BUILD的值为1。

_MSC_EXTENSIONS:当指定编译器选项/Ze(默认)时有定义,其值为1。

_MSC_FULL_VER:表示编译器的主,次版本号及build号。主版本号是整个版本号的第一部分,次版本号是整个版本号的第二部分,build号是整个版本号的第三部分。例如: 如果VC++编译器的版本号是15.00.20706.01,则_MSC_FULL_VER的值为150020706。可以在命令行键入cl /?来查看编译器的版本号。

_MSC_VER:表示编译器的主,次版本号。例如: 如果VC++编译器的版本号是15.00.20706.01,则_MSC_VER的值为1500。

__MSVC_RUNTIME_CHECKS:当指定编译器选项/RTC之一(/RTCs或/RTCu或/RTC1)时有定义。

_MT:当指定编译器选项/MD或/MDd(Multithreaded DLL)或/MT或/MTd(Multithreaded)时有定义。

_NATIVE_WCHAR_T_DEFINED:当指定编译器选项/Zc:wchar_t(将wchar_t视为内置类型)时有定义。

_OPENMP:当指定编译器选项/openmp时有定义,返回一个表示Visual C++中的OpenMP的日期的整数。

_VC_NODEFAULTLIB:当指定编译器选项/Zl(忽略默认库名)时有定义。

_WCHAR_T_DEFINED:当指定编译器选项/Zc:wchar_t或工程中包含的系统头文件中定义了wchar_t时有定义。

_WIN32:为Win32和Win64应用程序定义。总有定义。

_WIN64:为Win64应用程序定义。

_Wp64:当指定编译器选项/Wp64时有定义。

IOS开发之----常用宏定义和讲解

from:http://blog.sina.com.cn/s/blog_71715bf80101aaex.html

系统宏汇集

__FILE__  

               当前文件所在目录                          

 __DATE__                         

              “替代文字”是一个含有编译日期的字符串字面值,日期格式为“mm dd yyyy”(例如:“Mar 19 2006”)。如果日期小于10日,就在日的前面放一个空格符。NSLog(@"_DATE_=%s",__DATE__);

__FUNCTION__ 

                当前函数名称

__LINE__              

                当前语句在源文件中的行数

__TIME__
                此字符串字面值包含编译时间,格式为“hh:mm:ss”(范例:“08:00:59”)。

__STDC__
                整数常量1,表示此编译器遵循ISOC标准。

__STDC_VERSION__ 

             如何实现复合C89整部1,则这个宏的值为19940SL;如果实现符合C99,则这个宏的值为199901L;否则数值是未定义

__STDC_EOBTED__

              (C99)实现为宿主实现时为1,实现为独立实现为0
__STDC_IEC_559__ 

              (C99)浮点数实现复合IBC 60559标准时定义为1,否者数值是未定义
__STDC_IEC_559_COMPLEX__ 

              (C99)复数运算实现复合IBC 60559标准时定义为1,否者数值是未定义
__STDC_ISO_10646__ 

              (C99)定义为长整型常量,yyyymmL表示wchar_t值复合ISO 10646标准及其指定年月的修订补充,否则数值未定义

 

1、release时,屏蔽log

C代码  

#if defined (DEBUG) && DEBUG == 1  

  

#else  

#define NSLog(...) {};  

#endif  

 

2、在主线程或在后台执行block

C代码  

#define BACK(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)  

#define MAIN(block) dispatch_async(dispatch_get_main_queue(),block)  

 

3、设备相关

 

C代码  

#define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)  

  

#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)  

  

#define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)  

  

#define CurrentSystemVersion ([[UIDevice currentDevice] systemVersion])  

  

#define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])   

 

4、区分模拟器和真机

C代码  #if TARGET_OS_IPHONE  

//iPhone Device  

#endif  

  

#if TARGET_IPHONE_SIMULATOR  

//iPhone Simulator  

#endif  

 

5、根据是否使用ARC做不同操作

C代码  

#if __has_feature(objc_arc)  

    //compiling with ARC  

#else  

    // compiling without ARC  

#endif  

 

转载于:https://my.oschina.net/abcMx/blog/159255

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值