总述 宏的使用,大家经常会用,但是一般只是简单定义一个符号常量,类似于#define WHEEL_SCALE_MM 0.53f、 #define LOG_I(tag, text_fmt, ...) log_i(tag, text_fmt, ##VA_ARGS) ,但是除此之外还有宏还有个##粘贴作用 ...
分类:
其他好文 时间:
2020-10-27 11:49:58
阅读次数:
26
前言 本文介绍下X宏的使用 首先简单介绍下宏的几种用法 #define STRCAT(X,Y) X##Y #define _STR(X) #@X #define STR(X) #X #define Log(...) {printf(__VA_ARGS__);} /* * x##y 拼接xy * #@ ...
分类:
编程语言 时间:
2020-06-19 23:04:15
阅读次数:
95
序: 看micropython的parser代码时,出现了比较复杂的宏,于是研究一番,总结如下: parser中的宏: #define RULE_EXPAND(x) x #define RULE_PADDING(rule, ...) RULE_PADDING2(rule, __VA_ARGS__, ...
分类:
编程语言 时间:
2020-03-19 21:38:03
阅读次数:
104
在GNU C中,宏可以接受可变数目的参数,就象函数一样,例如: 1 2 #define pr_debug(fmt,arg...) \ printk(KERN_DEBUG fmt, ##arg) 用可变参数宏(variadic macros)传递可变参数表 你可能很熟悉在函数中使用可变参数表,如: 1 ...
分类:
编程语言 时间:
2020-02-04 21:55:50
阅读次数:
67
【1】变长参数的宏定义以及__VA_ARGS__ 在C99标准中,我们就已经可以使用变长参数的宏定义。 变长参数的宏定义是个神马?就是在宏定义的参数列表中最后一个参数为省略号。 而现在C++ 11中,使用预定义宏__VA_ARGS__可以在宏定义的实现部分替换省略号所代表的字符串。 原书示例: 定义 ...
分类:
编程语言 时间:
2020-01-20 21:12:19
阅读次数:
156
__VA_ARGS__ 声明 可变参数: #define OUTPUTDEBUGINFO #ifdef OUTPUTDEBUGINFO #define OUTPUT(X,...) {CString _str(_T("")); _str.Format(X,__VA_ARGS__); _str=_T(" ...
分类:
其他好文 时间:
2019-10-16 13:21:02
阅读次数:
63
一、前言 在后台程序运行出问题时,需要查看详尽的日志,C语言提供记录日志触发点文件名、行号、函数名的方法,关键是利用C99新增的预处理标识符__VA_ARGS__;先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。 二、A ...
分类:
编程语言 时间:
2019-09-14 16:21:46
阅读次数:
214
"[Luogu4173]" "题解" $1.$定义匹配函数 $2.$定义完全匹配函数 $3.$快速计算每一位的完全匹配函数值 cpp include include include include include define debug(...) fprintf(stderr,__VA_ARGS_ ...
分类:
其他好文 时间:
2019-03-10 12:24:11
阅读次数:
186
#if 1#define DEBUGP(fmt, ...) printf("%s(%d): "fmt"\n", __func__, __LINE__, ##__VA_ARGS__)#else#define DEBUGP(fmt, ...)#endif 将宏的值转换为字符串 #define __STR ...
分类:
系统相关 时间:
2019-01-05 10:48:22
阅读次数:
291
如何使用宏定义输出信息 C语言提供了#, ##, __VA_ARGS__等符号来帮助我们在宏定义中更好地输出信息。使用方式如下: 输出如下: #的作用是,它会在所引用的宏变量左右两边加一对引号。所以FUN1中的printf函数不会出错,因为FUN1(hello)预编译时被替换成了printf("he ...
分类:
编程语言 时间:
2018-09-12 01:21:15
阅读次数:
284