在后台程序运行出问题时,需要查看详尽的日志,C语言提供记录日志触发点文件名、行号、函数名的方法,关键是利用C99新增的预处理标识符__VA_ARGS__;先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。 二、ANSI C标准宏 __LINE__//...
__STDC__ 当要求程序严格遵循ANSIC标准时该标识符被赋值为1。 __cplusplus 标识符__LINE__和__FILE__通常用来调试程序; 标识符__DATE__和__TIME__通常用来在编译后的程序中加入一个时间标志,以区分程序的不同版本; 当要求程序严格遵循ANSIC标准时,标识符__STDC__就会被赋值为1; 当用C++编译程序编译时,...
__STDC__ 当要求程序严格遵循ANSIC标准时该标识符被赋值为1。 __cplusplus 标识符__LINE__和__FILE__通常用来调试程序; 标识符__DATE__和__TIME__通常用来在编译后的程序中加入一个时间标志,以区分程序的不同版本; 当要求程序严格遵循ANSIC标准时,标识符__STDC__就会被赋值为1; 当用C++编译程序编译时,...
C 标准库 -<stdarg.h> <stdarg.h>是 C 标准库中的一个头文件,提供了一组宏,用于访问可变数量的参数。 stdarg.h头文件定义了一个变量类型va_list和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。 可变参数的函数通在参数列表的末尾是使用省略号...定义的。
如果实现是标准的,则宏_ S T D C _含有十进制常量1。如果它含有任何其它数,则实现是非标准的。 可以定义宏,例如: 当定义了_DEBUG,输出数据信息和所在文件所在行: #ifdef _DEBUG#define DEBUGMSG(msg,date) printf(msg);printf(“%d%d%d”,date,_LINE_,_FILE_)#else#define DEBUGMSG(msg,date)#endif ...
在C库里面经常可以看到各种奇怪的宏,不知道是什么意思,但是C标准库已经存在了几十年,里面的东西都是成熟的,因此非常值得深入挖掘学习。 如stdlib.h里面: /* Return the value of envariable NAME, or NULL if it doesn't exist. */externchar*getenv(__constchar*__name)__THROW __nonnull((1))__wur;...
ANSIC标准定义了以下6种可供C语言使用的预定义宏: __LINE__ 在源代码中插入当前源代码行号 __FILE__ 在源代码中插入当前源代码文件名 __DATE__ 在源代码中插入当前编译日期〔注意和当前系统日期区别开来〕 __TIME__ 在源代码中插入当前编译时间〔注意和当前系统时间区别开来〕 ...
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等。下面列举一些成熟软件中常用的宏定义。 1. 防止一个头文件被重复包含 1#ifndef COMDEF_H 2#define COMDEF_H 3//头文件内容 4#endif 2. 重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方...
C语言常用的宏定义 写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等。下面列举一些成熟软件中常用的宏定义。 1. 防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 1. 2.
printf("当前C标准: %ld\n", __STDC_VERSION__);printf("当前日期: %s\n", __DATE__);printf("当前时间: %s\n", __TIME__); } 程序运行结果截图如下:C标准的预定义宏有很多,例如__STDC__、__STDC_HOSTED__、__STDC_ISO_10646__等等,有兴趣的朋友可以查阅详细文档进行了解,也可以私信我赠送...