文章浏览阅读9.9k次,点赞31次,收藏117次。在调试过程中,有时会用到自定义的打印,这是就会用到##__VA_ARGS__,接下来详细讲解。_##__va_args__...
admin 2023-11-11
文章浏览阅读707次。#:把参数名转为字符串#include <stdio.h>#define prin(x) printf("%s=%d",#x,x)int main(){ int i = 9; prin(i); return 0;}运行结果:##:用来连接两个子串#include <stdio.h>#define prin(x) print##x()void printA(){ printf("这是pr......
admin 2023-11-11
文章浏览阅读283次。在C语言的标准库中,printf、scanf、sscanf、sprintf、sscanf这些标准库的输入输出函数,参数都是可变的。在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用可变参数的宏是一个不错......
admin 2023-11-11
文章浏览阅读573次。#include <stdio.h>#include <stdarg.h>// n 元素个数, ...可变参数// 返回累加和double sum(int n, ...){ va_list ap; int i = 0; double d = 0; va_start(ap, n); for (i = 0; i < n; i++) { d += va_arg(ap, double); // 每次提取......
admin 2023-11-11
一、概念介绍:1、...:表示可变参数列表。2、__VA_ARGS__:表示是一个可变参数的宏。3、args...:表示可变参数列表,表示后续的args可能会有多个。4、args:表示是一个可变参数的宏。二、基础应用:#define LOG1(...) func1(__VA_ARGS__) ......
admin 2023-10-10
文章浏览阅读190次。#include<stdio.h># define MYLOG(FormatLiteral, ...) fprintf (stderr, "%s(%u): " FormatLiteral "\n", __FILE__, __LINE__, ##__VA_ARGS__)#define LONG_STRING_CONST(...) #__VA_ARGS__const char kSoftwareRenderingListJson[] = LONG_STRING_CONST( { ..._#_......
admin 2023-11-11
文章浏览阅读1.3k次。学习到一个新玩意,__FILE__, __LINE__, __AR_A___line__,__va_args__...
admin 2023-11-11
c语言的va_list可以传入多个参数, 而它的实现也是很简单, 很容易理解, 就是3个宏va_list实现typedef char * va_list;va_list是一个char *字符指针.va_start实现#define SIZEOF(n) ((sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1))#define va_start(va, fmt) (va = (va_......
admin 2023-10-09
文章浏览阅读688次。转载自:http://blog.sina.com.cn/s/blog_661314940100qmfg.html用可变参数宏(variadic macros)传递可变参数表,你可能很熟悉在函数中使用可变参数表,如:void printf(const char* format, …);直到最近,可变参数表还是只能应用在真正......
admin 2023-11-11
文章浏览阅读8.8k次,点赞8次,收藏47次。介绍:可变参数宏__VA_ARGS__是C99中引入的一个宏,表示一个或多个参数,类似函数的可变参数中的省略号;使用方法:#define debug(format, ...) printf(format, ##__VA_ARGS__)void main(void){ debug("%s: %......
admin 2023-11-11
文章浏览阅读1k次。C++ __VA_ARGS__ 在变参数模板类(Vardic template class) 中的使用C++ 中 __VA_ARGS__ 宏的一个一般用法是实现可变参数的传递功能,例如#define DEBUG_LOG(const char *fmt, ...) \ do { \ char dbgbuf[1024]; \ sprintf(dbgbuf, f......
admin 2023-11-11
C++可变参数宏__VA_ARGS__ 之前我们学习了C++中的可变参数,但是可变参数还是只能应用在真正的函数中,不能使用在宏中。而在C99编译器标准终于改变了这种局面,它允许你可以定义可变参数宏(variadic macros),这样你就可以使......
admin 2023-10-10
文章浏览阅读1.1w次,点赞12次,收藏42次。C语言函数之可变参数原理:va_start、va_arg及va_end说到C语言函数可变参数,我们最先想到的可能就是printf、scanf、printk了。在Linux-2.6.24.7内核源码里,printk函数原型如下: asmlinkageintprintk(cons......
admin 2024-04-01
先说一下本文中会提到的内容:##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__等宏变量:先举一个例子,会用到上面这些宏:#define myprintf(...) printk("[lch]:File:%s, Line:%d, Function:%s," \ __VA_ARGS__, __FILE__, __LINE__ ,__...
admin 2023-10-10
文章浏览阅读1.2k次。一 常见宏概念先说一下本文中会提到的内容:#,##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__等#: 把语言符号转换成字符串 ,字符串化(stringizing)##: 宏连接符 __VA_ARGS__: 可变参数宏(C99编译器标准终于改......
admin 2023-11-11
文章浏览阅读3.5w次,点赞29次,收藏206次。在ANSI C中,这些宏的定义位于stdarg.h中:typedef char *va_list;va_start宏,获取可变参数列表的第一个参数的地址(list是类型为va_list的指针,param1是可变参数最左边的参数):#define va_start(lis......
admin 2023-11-11
文章浏览阅读127次。#是取变量的意思,把参数拿来,并字符串化。如:#define PRINT1(NAME) printf("token"#NAME"\n"){NSString*ab1 =@"c爷爷";PRINT1(ab1);PRINT1(@"c爷爷");}这段代码输出什么呢?ab1 和 @"c爷爷"......
admin 2023-11-11
友情链接申请要求: 不违法不降权 权重相当 请联系QQ:737597453