[转]宏的高级使用--##,__VA_ARGS__, __FILE__, __FUNCTION__等 http://blog.csdn.net/yiya1989/article/details/7849588 先说一下本文中会提到的内容:##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__等 宏变量: 先举一个例子,会用到上面这些宏: #define myprintf(...) printk("[lch]:File:%s, Line:%d, Func…
原文:C语言宏的高级应用 关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号.比如下面代码中的宏: #define WARN_IF(EXP) do{ if (EXP) fprintf(stderr, "Warning: " #EXP "); } ) 那么实际使用中会出现下面所示的替换过程: WARN_IF (divider == );被替换为 do { ) f…
因为自 Visual Studio 2012 开始,微软已经取消了对宏的支持,所以本篇文章所述内容只适用于 Visual Studio 2010 或更早期版本的 VS. 在上一篇中,我已经介绍了如何编写一个最简单的宏,本文将进一步介绍如何用宏来实现对代码编辑窗口控制.在本文结束的时候,你应该能自己实现如下两个功能,第一个用于对方法体进行 phase0 标记:第二个可以将当前窗口中的代码进行归类,将所有方法.属性.变量通过region进行分块. 动画演示:phase0 动画演示:设置 region…
本节学习目的 1)分析printk()函数 2)使用printk()调试驱动 1.在驱动调试中,使用printk(),是最简单,最方便的办法 当uboot的命令行里的“console=tty1”时,表示printk()输出在开发板的LCD屏上 当uboot的命令行里的“console=ttySA0,115200”时,表示printk()输出在串口UART0上,波特率=115200 当uboot的命令行里的“console=tty1 console=ttySA0,115200”时,表示printk…
PHP has large number of predefined constants. This HOWTO will present the seven most important, most practical and most useful PHP Magic Constants. __FILE__ – The full path and filename of the file. __DIR__ – The directory of the file. __FUNCTION__ –…
转自:http://blog.csdn.net/edonlii/article/details/8491342/ 在linux编程中,当文件数量变的众多之后,使用gdb调试就是一场灾难.因此在程序中加入合理的打印信息,定位错误出现的文件名,函数名,行号等信息,能更高效的定位到问题的所在. 下面定义了宏,分别是WARNING,INFO,ERROR,SHOW_TIME,DEBUG等.利用了 __FILE__,_FUNCTION__, __LINE__等变量... _FILE__,__FUNCTION…
__VA_ARGS__ 是一个可变参数的宏(gcc支持).实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点).这样预定义宏_ _VA_ARGS_ _就可以被用在替换部分中,替换省略号所代表的字符串.加##用来支持0个可变参数的情况. 测试代码: #include<stdio.h> #define PRINT_DBG(debug, ...)\ {\ if(debug) {\ fprintf(stderr, "%s %s [%d]: ", __FILE__, _…
#define qWiFiDebug(format, ...) qDebug("[WiFi] "format" File:%s, Line:%d, Function:%s", ##__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__); __VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持).宏前面加上##的作用在于,当可变参数…
一 .__VA_ARGS__ P454 所讲printf()这些输出函数的参数是可变的,在调试程序时,可能希望定义参数为可变的输出函数, 那么可变参数宏会是一个选择,例如: #define DEBUG(X, ...) printf("Message", #X,":" __VA_ARGS__) 其中,...表示参数可变,__VA_ARGS__在预处理中为实际的参数集所替换部分. //variadic.c----可变宏 #define DBG(format, ...)…
__FUNCTION__, __LINE__ 今天无意之间看到一段代码,里面有这样一个片段: if (!interface) { err ("%s - error, can't find device for minor %d", __FUNCTION__, subminor); retval = -ENODEV; goto exit; } 这个__FUNCTION__干嘛的? 少见(本人水平不够~),有意思~ 后面找了一下,这个是和编译器GCC相关连的宏定义,而这些宏定义的时候有助于…