首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
__VA_ARGS__ 宏
2024-08-31
__VA_ARGS__可变参数宏
#define qWiFiDebug(format, ...) qDebug("[WiFi] "format" File:%s, Line:%d, Function:%s", ##__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__); __VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持).宏前面加上##的作用在于,当可变参数
C语言 ## __VA_ARGS__ 宏
在GNU C中,宏可以接受可变数目的参数,就象函数一样 可以把__VA_ARGS__看成是将...赋值给该宏 //注意这里不能在函数中调用abc() #include <stdio.h> #include <stdarg.h> #define ABC(...) printf(__VA_ARGS__) /*void abc(...) { //printf(__VA_ARGS__); }*/ int main() { ABC("%s\n","hello&q
__VA_ARGS__用法(转)
自定义调试信息的输出 调试信息的输出方法有很多种, 例如直接用printf, 或者出错时使用perror, fprintf等将信息直接打印到终端上, 在Qt上面一般使用qDebug,而守护进程则一般是使用syslog将调试信息输出到日志文件中等等... 使用标准的方法打印调试信息有时候不是很方便, 例如Qt编程, 在调试已有的代码时, 我想在打印调试信息的地方, 把代码位置也打印出来以方便定位错误, 或者需要在调试信息前面加一个前辍, 好方便在调试信息太多的时候可以用grep过滤一下, 仅
__VA_ARGS__与逗号操作符的巧妙结合
class Test { public: template<class T> Test& operator,(T t) { //具体操作 return *this; } } Test test; #define TEST(...) test,__VA_ARGS__ 按上述操作,因为__VA_ARGS__宏每次展开后为逗号参数列表.如 TEST(1,2,3)展开为test,1,2,3. 这时test因为重载了逗号操作符,每次逗号操作后又返回test的引用,就可以依次处理1,2,3这三个入
宏 #,##,_ _VA_ARGS_ _
宏里面使用: 一.# 转为字符串 #define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(x)) 如果使用PSQR("test2”),则编译出错:而使用PSQR(test2),则ok: #define TEST2(p) (cout<<#p<<endl); 如果TEST2("test2"); 输出”test2“.奇怪? 二.##
#define宏定义中## #@ # \ 符号使用
C/C++ 宏命令的神奇用法. 先看下面三条语句: #define Conn(x,y) x##y#define ToChar(x) #@x#define ToString(x) #x 1. ## 连接操作符##表示连接(token pasting, or token concatenation,merge two tokens into one while expanding macros).x##y表示什么?表示x连接y,举例说: int n = Conn(123,456
C语言的宏macro的使用
C's Macro Introduction 1.The Connect Macros: ## 这是一个预处理连接符,这个操作符主要用来将两个符号连接成为一个完整的宏符号.通过下面的代码,可以看到其具体的使用方法: 如下例子: #include <stdio.h> struct macro { int N; char M; }; struct macro macro_drv = {100,20}; #define XNAME(n) x##n #define Macro(x) x##_drv.N
__VA_ARGS__用法
转载 自定义调试信息的输出 调试信息的输出方法有很多种, 例如直接用printf, 或者出错时使用perror, fprintf等将信息直接打印到终端上, 在Qt上面一般使用qDebug,而守护进程则一般是使用syslog将调试信息输出到日志文件中等等... 使用标准的方法打印调试信息有时候不是很方便, 例如Qt编程, 在调试已有的代码时, 我想在打印调试信息的地方, 把代码位置也打印出来以方便定位错误, 或者需要在调试信息前面加一个前辍, 好方便在调试信息太多的时候可以用grep过滤一下
iOS开发技巧-2
1,打印View所有子视图 po [[self view]recursiveDescription] 2,layoutSubviews调用的调用时机 * 当视图第一次显示的时候会被调用 * 当这个视图显示到屏幕上了,点击按钮 * 添加子视图也会调用这个方法 * 当本视图的大小发生改变的时候是会调用的 * 当子视图的frame发生改变的时候是会调用的 * 当删除子视图的时候是会调用的 3,NSString过滤特殊字符 // 定义一个特殊字符的集合 NSCharacterSet *set = [NS
网上收集的以及自己总结的iOS开发技巧
Objective-C 1.让Xcode的控制台支持LLDB类型的打印 这有什么用? 怎么说尼,笔者认为这个还是比较有用滴,为什么有用尼? 因为在Xcode断点调试的时候, 在控制台输入 po self.view.frame 或者 po id 类型的时候就死翘翘了.不信? 看如下图 : 进入正题 打开终端输入三条命令: 1. touch ~/.lldbinit 2. echo display @import UIKit >> ~/.lldbinit 3. echo target stop-ho
C++11笔记
__func__宏 __func__返回当前的函数名,也可以返回class和struct名. /*返回函数名hello*/ const char* hello() { return __func__; } /*返回结构体名foo*/ struct foo { foo():name(__func){} const char* name; } __VA_ARGS__宏 可变参数宏 #define INFO(...) printf(__VA_ARGS) noexcept noexcept操作会阻止异常
分享iOS最喜欢的技巧和提示
转自:http://blog.csdn.net/biggercoffee/article/details/50394027 Objective-C 1.让Xcode的控制台支持LLDB类型的打印 这有什么用? 怎么说尼,笔者认为这个还是比较有用滴,为什么有用尼? 因为在Xcode断点调试的时候, 在控制台输入 po self.view.frame 或者 po id 类型的时候就死翘翘了.不信? 看如下图 : 进入正题 打开终端输入三条命令: 1. touch ~/.lldbinit 2. ech
分享你最喜欢的技巧和提示(Xcode,Objective-C,Swift,C...等等)
http://www.cocoachina.com/ios/20151231/14846.html 笔者分享总结如下(本篇会不定期进行更新) : Objective-C 1.让Xcode的控制台支持LLDB类型的打印 这有什么用? 怎么说尼,笔者认为这个还是比较有用滴,为什么有用尼? 因为在Xcode断点调试的时候, 在控制台输入 po self.view.frame 或者 po id 类型的时候就死翘翘了.不信? 看如下图 : 进入正题 打开终端输入三条命令: 1. touch ~/.lldb
浅谈Xcode5和Xcode7在系统创建的文件夹和文件中的区别
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute
common
lexical_cast 提供string2int, int2string, #define(...) 可变宏:-和__VA_ARGS__ 宏定义中参数列表的最后一个参数为省略号(三个英文句号,省略号只能代替最后参数).这样,预定义宏__VA_ARGS__就可以被用在替换部分中,以表明省略号代码什么.例如: 1: #define PR(...) printf(__VA_ARGS__) 2: #define PX(x,...) printf("Message " #x "
iOS 知识-常用小技巧大杂烩
原文链接:http://www.jianshu.com/p/7c3ee5e67d03. 自己看的. 1,打印View所有子视图 po [[self view]recursiveDescription] 2,layoutSubviews调用的调用时机 * 当视图第一次显示的时候会被调用 * 当这个视图显示到屏幕上了,点击按钮 * 添加子视图也会调用这个方法 * 当本视图的大小发生改变的时候是会调用的 * 当子视图的frame发生改变的时候是会调用的 * 当删除子视图的时候是会调用的 3,NSStr
写一个Windows上的守护进程(4)日志其余
写一个Windows上的守护进程(4)日志其余 这次把和日志相关的其他东西一并说了. 一.vaformat C++日志接口通常有两种形式:流输入形式,printf形式. 我采用printf形式,因为流输入不好控制格式. printf形式要求日志接口支持不定长参数,我没有直接在日志实现类里边支持不定长参数,而是只接受一个字符串参数,可以参见第一篇. 为什么呢? 如果要成为不定长参数,就是这样 bool log_string(const LOG_LEVEL level, const char* fi
iOS小知识点大杂烩
转自OPEN经验 1,打印View所有子视图 po [[self view]recursiveDescription] 2,layoutSubviews调用的调用时机 * 当视图第一次显示的时候会被调用 * 当这个视图显示到屏幕上了,点击按钮 * 添加子视图也会调用这个方法 * 当本视图的大小发生改变的时候是会调用的 * 当子视图的frame发生改变的时候是会调用的 * 当删除子视图的时候是会调用的 3,NSString过滤特殊字符 // 定义一个特殊字符的集合 NSCharacterSet *
easylogging++学习记录(二):流式日志
easylogging++日志库流式日志的写入,依赖于el::base::Writer类的析构,以debug日志为例:具体代码如下: #define LOG(LEVEL) CLOG(LEVEL, ELPP_CURR_FILE_LOGGER_ID) #define CLOG(LEVEL, ...)\ C##LEVEL(el::base::Writer, el::base::DispatchAction::NormalLog, __VA_ARGS__) #if ELPP_DEBUG_LOG # de
c语言中#和##的用法
一.一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #include<cstdio> #include<climits> using namespace std; #define STR(s) #s #define CONS(a,b) int(a##e##b) int main() { printf(STR(vck)); // 输出字符串"vck" printf("%d\
『干货』分享你最喜欢的技巧和提示(Xcode,objective-c,swift,c...等等)
亲爱的读者们,你们好 !年底将近,分享从过去一年你最喜欢的技巧和建议作为礼物送给新手们.提交你的最喜欢的迅速或objc琐事,实用的提示,意外的发现,实用的解决方法,没用的迷恋,或不论什么其它你认为今年非常酷. 就在以下写下你的评论! 笔者分享总结例如以下(本篇会不定期进行更新) : objective-c 用宏定义检測block是否可用~! #define BLOCK_EXEC(block, ...) if (block) { block(__VA_ARGS__); }; // 宏定义之前的使用
热门专题
css 浮动的元素被绝对定位的元素盖住了怎么办
Matb怎么写出对称矩阵
vba中keyboard shortcut
海南地图洋浦 echarts
esxi 远程web管理
pikachu-master数字注入
左右箭头放置在swiper外面
更改rocketmq端口后集群不起作用
css box 线得颜色
获取option自定义属性值
jsyyyymmddhhmmss转换为日期
从学生表中查询所有学生的信息,并分别赋予一个别名
线性规划生产计划问题
flask如何单独给某个接口 before_request
debian 切换 到root
onnx模型接入relay
Intel E810 Linux 系统不识别
c语言两个main怎么修改
Puppeteer 安装报错
centos 7.9 quarro p2000显卡驱动