重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

C语言中定义和使用特殊标准

本篇文章给大家分享的是有关C语言中定义和使用特殊标准,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

成都创新互联是一家集网站建设,河南企业网站建设,河南品牌网站建设,网站定制,河南网站建设报价,网络营销,网络优化,河南网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

一、ANSI C特殊标准定义罗列一些常见的特殊定义:

__FILE__:正在编译文件的路径及文件名

__LINE__:正在编译文件的行号

__DATE__:编译时刻的日期字符串 如“July 19 2019”

__TIME__:编译时刻的时间字符串 如”22:00:00“

代码:

char BuildFile[] = __FILE__; int  BuildLine = __LINE__; char BuildDate[] = __DATE__; char BuildTime[] = __TIME__;  printf("编译文件路径:%s\n", BuildFile); printf("编译代码所在行:%d\n", TestLine); printf("编译日期:%s\n", BuildDate); printf("编译时间:%s\n", BuildTime);

提示:__LINE__是整型数据;

其实除了这些还有很多相关的定义,比如:

1.__FUNCTION__:函数名,类型为:字符常量指针。

char const* BuildFunName = __FUNCTION__; printf("函数名称为:%s\n", BuildFunName);

2.__VER__:IDE版本信息,类型为:整型。

如我用的IAR版本为:7.80.04,如下图:

C语言中定义和使用特殊标准

代码:

int  IDEVersion = __VER__; printf("IDE版本:%d\n", IDEVersion);

输出:

IDE版本:7080004

二、可变参数

我们在学习C语言的时候,都知道printf是可变参数的函数:

char a = 1; char b = 2; char c = 3; printf("a = %d\n", a); printf("a = %d; b = %d\n", a, b); printf("a = %d; b = %d; c = %d\n", a, b, c);

上面就是可变参数printf的例子,也就是说参数可以一个也可以多个。

而接下来说的__VA_ARGS__,就是一个可变参数宏,与printf中可变参数的宏定义一个道理,是新C99规范中增加的。

1.关于__VA_ARGS__

__VA_ARGS__它是一个可变参数的宏,就是将左边宏中“...” 的内容原样抄写在右边 __VA_ARGS__ 所在的位置。

要注意的是,printf 的输出格式是括号内左边是字符串,右边是变量,而且右变量与左输出格式是一一对应的,不对应就会出错。可以参看下面那个例子,  __VA_ARGS__其实是遵循了printf的格式。

...缺省号代表一个可以变化的参数表。使用保留名 __VA_ARGS__ 把参数传递给宏。当宏的调用展开时,实际的参数就传递给  printf()了。

2.实例说明

#define SENSOR_Printf(...)  printf("--SENSOR--"__VA_ARGS__) int TemperatureVal = 25; SENSOR_Printf("温度 = %d℃\n", TemperatureVal);

输出结果:

--SENSOR--温度 = 25℃

用心的朋友可能会猜测的到:“...”类似等于“__VA_ARGS__”。

从例子中我们可以看得出来,__VA_ARGS__的用途,主要是用于可变参数的函数。我们使用较多的printf就是最常见的一个。

如果我们的工程很庞大,我们就可以将打印信息分类,这样的好处就是方便我们识别各类打印信息。

以上就是C语言中定义和使用特殊标准,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。


当前名称:C语言中定义和使用特殊标准
文章地址:http://cqcxhl.cn/article/pepiep.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP