可变参数宏__VA_ARGS__和...

简介: __VA_ARGS__ 是一个可变参数的宏(gcc支持)。实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏_ _VA_ARGS_ _就可以被用在替换部分中,替换省略号所代表的字符串。

__VA_ARGS__ 是一个可变参数的宏(gcc支持)。实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏_ _VA_ARGS_ _就可以被用在替换部分中,替换省略号所代表的字符串。加##用来支持0个可变参数的情况。 

测试代码: 
#include<stdio.h> 

#define PRINT_DBG(debug, ...)\ 
{\ 
    if(debug) {\ 
    fprintf(stderr, "%s %s [%d]: ", __FILE__, __FUNCTION__, __LINE__);\ 
    fprintf(stderr, __VA_ARGS__);\ 
    }\ 

#define MACRO(s, ...) printf(s, ##__VA_ARGS__) 


int main() 

int i =100; 
PRINT_DBG(1,"hello\n"); 
PRINT_DBG(1,"world, %d\n",i); 
MACRO("hello, world\n"); //这里没有可变参数, 所以要用##__VA_ARGS__ 
MACRO("hello, %s\n", "fanrey"); 
return 0; 


编译:gcc -o vaargs vaargs.c 

运行: ./vaargs 

vaargs.c main [16]: hello 
vaargs.c main [17]: world, 100 
hello, world 
hello, fanrey 

目录
相关文章
|
机器学习/深度学习 监控 Web App开发
SLS机器学习最佳实战:根因分析(一)
通过算法,快速定位到某个宏观异常在微观粒度的具体表现形式,能够更好的帮助运营同学和运维同学分析大量异常,降低问题定位的时间。
13312 0
|
监控 安全 数据可视化
哪些项目适合采用BOT+EPC模式?深度解析
2分钟了解什么是BOT+EPC项目管理模式以及该模式适用于哪些类型的项目。
1077 1
哪些项目适合采用BOT+EPC模式?深度解析
|
7月前
|
存储 监控 网络协议
HarmonyOS NEXT实战:网络状态监控
本教程介绍如何在HarmonyOS Next中使用@ohos.net.connection模块实现网络状态监控,并通过AppStorage进行状态管理,适用于教育场景下的网络检测功能开发。
297 2
|
机器学习/深度学习 存储 算法
数据结构与算法——BFS(广度优先搜索)
数据结构与算法——BFS(广度优先搜索)
|
Java C++ Python
C++ 使用getline():从文件中读取一行字符串
getline() 方法从 cin 输入流缓冲区中读取一行字符串。在此基础上,getline() 方法还适用于读取指定文件中的一行数据,本节就给大家做详细的讲解。 我们知道,getline() 方法定义在 istream 类中,而 fstream 和 ifstream 类继承自 istream 类,因此 fstream 和 ifstream 的类对象可以调用 getline() 成员方法。 当文件流对象调用 getline() 方法时,该方法的功能就变成了从指定文件中读取一行字符串。该方法有以下 2 种语法格式: istream & getline(char* buf, int bufS
594 0
|
编解码
Open3D Voxelization 体素化
Open3D Voxelization 体素化
577 1
|
监控 安全 数据安全/隐私保护
如何通过手机设置苹果账户的双重认证
如何通过手机设置苹果账户的双重认证
380 1
|
存储 设计模式 算法
【C++ 泛型编程 高级篇】 C++ 17 解析std::apply 的多种应用场景(一)
【C++ 泛型编程 高级篇】 C++ 17 解析std::apply 的多种应用场景
1213 0
Sublime 的基本设置
Sublime 的基本设置
282 1
|
编译器 程序员 C语言
程序的编译与链接(预处理详解)+百度面试笔试题+《高质量C/C++编程指南》笔试题
如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分。
254 0