文章浏览阅读8.8k次,点赞8次,收藏47次。介绍:可变参数宏__VA_ARGS__是C99中引入的一个宏,表示一个或多个参数,类似函数的可变参数中的省略号;使用方法:#define debug(format, ...) printf(format, ##__VA_ARGS__)void main(void){ debug("%s: %......
2023-11-11 18:23 阅读 阅读全文文章浏览阅读1k次。C++ __VA_ARGS__ 在变参数模板类(Vardic template class) 中的使用C++ 中 __VA_ARGS__ 宏的一个一般用法是实现可变参数的传递功能,例如#define DEBUG_LOG(const char *fmt, ...) \ do { \ char dbgbuf[1024]; \ sprintf(dbgbuf, f......
2023-11-11 18:14 阅读 阅读全文C++可变参数宏__VA_ARGS__ 之前我们学习了C++中的可变参数,但是可变参数还是只能应用在真正的函数中,不能使用在宏中。而在C99编译器标准终于改变了这种局面,它允许你可以定义可变参数宏(variadic macros),这样你就可以使......
2023-10-10 02:03 阅读 阅读全文文章浏览阅读1.1w次,点赞12次,收藏42次。C语言函数之可变参数原理:va_start、va_arg及va_end说到C语言函数可变参数,我们最先想到的可能就是printf、scanf、printk了。在Linux-2.6.24.7内核源码里,printk函数原型如下: asmlinkageintprintk(cons......
2024-04-01 12:01 阅读 阅读全文先说一下本文中会提到的内容:##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__等宏变量:先举一个例子,会用到上面这些宏:#define myprintf(...) printk("[lch]:File:%s, Line:%d, Function:%s," \ __VA_ARGS__, __FILE__, __LINE__ ,__...
2023-10-10 02:03 阅读 阅读全文文章浏览阅读1.2k次。一 常见宏概念先说一下本文中会提到的内容:#,##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__等#: 把语言符号转换成字符串 ,字符串化(stringizing)##: 宏连接符 __VA_ARGS__: 可变参数宏(C99编译器标准终于改......
2023-11-11 18:30 阅读 阅读全文文章浏览阅读3.5w次,点赞29次,收藏206次。在ANSI C中,这些宏的定义位于stdarg.h中:typedef char *va_list;va_start宏,获取可变参数列表的第一个参数的地址(list是类型为va_list的指针,param1是可变参数最左边的参数):#define va_start(lis......
2023-11-11 18:55 阅读 阅读全文文章浏览阅读127次。#是取变量的意思,把参数拿来,并字符串化。如:#define PRINT1(NAME) printf("token"#NAME"\n"){NSString*ab1 =@"c爷爷";PRINT1(ab1);PRINT1(@"c爷爷");}这段代码输出什么呢?ab1 和 @"c爷爷"......
2023-11-11 18:52 阅读 阅读全文从网上借鉴了一些内容,然后整理了一下三者的区别,记录一下。#include <iostream>// #: 用来把参数转换成字符串#define LOG1(x) do { printf("%s=%d\n",#x,x); }while(0)// ##:用于将带参数的宏定义中将两个子串(token)联接起来,从......
2023-10-10 02:03 阅读 阅读全文文章浏览阅读254次。目录一.##__VA_ARGS__原理二.##__VA_ARGS__使用三.猜你喜欢零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门一.##__VA_ARGS__原理C 语言中 __VA_ARGS__ 是一个可变参数的宏,是新的 C99 规范中新增的,目前......
2023-11-11 18:52 阅读 阅读全文