LINUX C中用define定义可变参数的宏 (转)

SYSCALL_DEFINE3 宏定义 SYSCALL_DEFINE3 在何处定义? 阅读详情

一般在调试打印Debug信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC也支持可变参数宏, 但是两种在细节上可能存在区别.
1. __VA_ARGS__
        __VA_ARGS__ 将 "..." 传递给宏 . 如
        #define debug(format, ...) fprintf(stderr, format, __VA_ARGS__)

2. GCC的复杂宏
        GCC使用一种不同的语法,从而可以给可变参数一个名字,如同其它参数一样.
        #define debug(format, args...) fprintf (stderr, format, args)
        这和第一条的宏例子是完全一样的,但是这么写可读性更强并且更容易进行描述.

3. ##__VA_ARGS__
        上面两个定义的宏,如果出现 debug("A Message")的时候,由于宏展开后有个多余的逗号,所以将导致编译错误.
        为了解决这个问题,CPP 使用一个特殊的"##"操作,格式如下:
        #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
        这里,如果可变参数被忽略或为空,"##"操作将使预处理器(preprocessor)去除掉它前面的那个逗号.

 

http://blog.chinaunix.net/u3/94705/showart_2043847.html

当知识图谱遇见多模态:突破文本界限的智能认知革命 本文探讨了知识图谱与多模态技术的融合,揭示了其在医疗诊断、文化保护等领域的革命性应用。通过图神经网络、对比学习框架和跨模态注意力机制等技术,实现了文本、图像和音频数据的智能关联与认知。文章还分享了在Neo4j等图数据库中的实践案例和优化策略,为构建下一代智能认知系统提供了技术参考。 阅读详情

相关推荐

别再到处找数据了!用Python+Tushare Pro免费获取A股行情、财务、龙虎榜数据(附完整代码)

本文详细介绍了如何使用Python和Tushare Pro免费获取A股行情、财务数据和龙虎榜数据,并构建本地金融数据仓库。通过完整的代码示例,帮助读者快速掌握金融数据接口的使用方法,提升量化分析效率。Tushare Pro作为免费、稳定的数据源,覆盖全面且API友好,是个人投资者的理想选择。

weixin_30596343的博客 617

LINUX C中用define定义可变参数的宏

一般在调试打印Debug信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC也支持可变参数宏, 但是两种在细节上可能存在区别.1. __VA_ARGS__        __VA_ARGS__ 将 "..." 传递给宏 . 如        #define debug(format, ...) fprintf(stderr,

helloworlddm的博客 1060

Android System Slice应用加载分析,及启用Slice后,锁屏日期第一次开机正常显示,但后面锁屏不显示问题分析

最近发现Android P上锁屏界面,日期不显示,发现从P开始后,出现了Slice来允许应用以模块化,可交互的方式,插入多个使用场景。Android P的system UI 也使用到了这一特性,表现为锁屏时间,日期,勿扰图标,闹钟等。 如何使用Slice 以System UI中KeyguardSliceView.java来说明它的使用方法 首先,我们打开System UI 的mk 文件,可以看到以...

qq_33595823的博客 3035

Linux:C/C++接受可变参数的宏

Linux:C/C++接受可变参数的宏 C/C++调试宏示例(可变参数,记录文件名以及行号)

test1280 1626

微弱电流检测放大器PCB布线布局设计

微弱电流检测放大器PCB布线布局设计的注意事项,保护环的概念和相关设计。

ydgd118的博客 1万+

【Java微服务-医疗管理项目】(附源码+资料+教程)

尚医疗是专门为各大医院、门诊提供的一款医疗管理平台。 系统包含:系统管理、药品进销存管理、看病就诊、收费管理、检查管理、数据统计等核心模块。 通过尚医疗系统可以快速、方便的管理病人从挂号到门诊结束所涉及到的全套流程。也可以清晰明了的体现出药品进货、出售的所有记录。.........

m0_72882572的博客 2203

linux下可变参数及宏定义封装函数

以下函数包含内容:a 使用宏封装可变参函数 b 可变参数。比较简单,无注释。   两个函数均可以打印出调用者的文件、函数、行号信息。需要参考该代码的,拿走不谢!   #include  #include  #include      #define BUF_LEN 500   /* 封装调试函数 */ #define macroFunc(info)  (transparen

misslio的专栏 5244

《SAP FICO系统配置从入门到精通共40篇》030、集成配置:FI与生产计划(PP)的自动科目确定

FI和PP的自动科目确定,本质上是把生产业务翻译成会计语言。翻译规则就藏在那些配置表里。配的时候多想一步:这个业务动作,在财务眼里是什么?是材料消耗?是产出入库?还是工费分摊?想清楚这个,再看配置界面,那些代码就不是天书了。最好的测试方式,是月底关账前,让生产部门跑一遍所有类型的生产订单。配置对不对,业务最知道。

985大学毕业,前某大厂员工,啥都会点的程序员! 573

linux 中C语言便于调试的宏定义编写及 __FILE__,__FUNCTION__, __LINE__参数使用

在linux编程中,当文件数量变的众多之后,使用gdb调试就是一场灾难。因此在程序中加入合理的打印信息,定位错误出现的文件名,函数名,行号等信息,能更高效的定位到问题的所在。      下面定义了宏,分别是WARNING,INFO,ERROR,SHOW_TIME,DEBUG等。利用了 __FILE__,_FUNCTION__, __LINE__等变量。。。       _FILE__,__FU

AddyLee的专栏 1万+

Linux ARM平台开发系列讲解(LED) 2.1.1 如何点亮一个LED之添加设备树信息

1. 设备树添加设备信息 我拿到的开发板上有两颗LED供用户编程使用,分别是GPIO5_IO8和GPIO5_IO9,设备信息如下,不同板子的设备定义不同,根据自己的实际情况进行添加。 2. 编译设备树 根据自己拿到的SDK,执行编译命令,我这里拿到的SDK编译脚本为: ./build.sh kernel 3. 使用uuu工具烧录新编译好的内核 因为imx8 SDK设备树和内核是统一编译成一个镜像,所以只需要烧录内核,设备树文件也会烧录。 sudo uuu -b emmc imx-kernel.bin

DSMGUOGUO的博客 918

制作一款精美的 Qt IFW 安装程序

对于 Qt IFW 来说,默认的安装界面并不吸引人。倘若要制作一款精美的安装程序,这显然是不够的,需要在此基础上进行一系列定制。

青春不老,奋斗不止! 5259

linux不定参数函数,linux下可变参数及宏定义封装函数

以下函数包含内容:a使用宏封装可变参函数b可变参数。比较简单,无注释。两个函数均可以打印出调用者的文件、函数、行号信息。需要参考该代码的,拿走不谢!#include#include#include#defineBUF_LEN500/*封装调试函数*/#definemacroFunc(info)(transparentMacroFunc(__FILE__,__func__,__...

weixin_39627052的博客 313

101、LLC谐振变换器的传递函数推导

文章摘要 LLC谐振变换器的传递函数推导是电源设计的关键环节。作者通过一次炸管事故案例,揭示了忽视传递函数计算的严重后果。LLC传递函数复杂的根源在于其三个谐振元件(Lr、Cr、Lm)的变频工作特性,导致增益曲线非单调变化。文章详细介绍了采用扩展描述函数法的建模思路,指出Lm对增益曲线的重要影响,并给出了传递函数的数学表达式及频率响应特性。通过实际调试案例,作者对比了错误补偿器设计(Type II)与优化方案(Type III)的效果差异,强调了实测验证的重要性。最后总结了5条实用经验,包括留足裕度、关注启

Jack010169的博客 152

linux c 日志宏,LINUX C中用define定义可变参数的宏

LINUX C中用define定义可变参数的宏一般在调试打印Debug信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC也支持可变参数宏, 但是两种在细节上可能存在区别.1. __VA_ARGS____VA_ARGS__ 将 "..." 传递给宏 . 如#define debug(format, ...) fprintf(s...

weixin_35876760的博客 275

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java define 宏_#define 用法总结

定义简单的常数:定义常量,便于修改(切不可在后面加上分号!)#define N 1000等效于 const int N = 1000; 但略有不同,define只是简单替换,而不是作为一个量来使用.2. 定义简单的函数:注意多使用括号define可以像函数那样接受一些参数,如下:#define max(x,y) (x)>(y)?(x):(y);这个定义就将返回两个数中较大的那个,看到了吗?因...

weixin_34711121的博客 7775

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C语言 define

​本文结合《C Primer Plus》和网上的资料(c/c++中define用法详解及代码示例_MachineChen的博客-优快云博客_define在c语言中用法)对C语言中的define做一个总结 ​

weixin_45767431的博客 1213

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

linux 可变参数宏实现,LINUX C中用define定义可变参数的宏

一般在调试打印Debug信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC也支持可变参数宏, 但是两种在细节上可能存在区别.1. __VA_ARGS____VA_ARGS__ 将 "..." 传递给宏 . 如#define debug(format, ...) fprintf(stderr, format, __VA_ARG...

weixin_42437253的博客 233

单片机c语言的define,单片机C语言中define的妙用

单片机C语言中define的妙用最近一款产品调试时发现了问题,在一起检查一个小伙伴的C程序。问题不大,但暴露了一点问题。比如:PORTB=0x23; //他的意思是把第5和第2位置1可是你能一下子看出来第5和第2位置1吗?其实应该是0x24,他并没有发现这个错误,算错了,所以正确的是:PORTB=0x23;其实,我们完全可以避免这个错误。打开我们编译器自带的头文件,比如AVR Tiny13头文件中...

weixin_36212334的博客 1877

自定义宏DEFINE(s, m)解析

在arch/xxx/kernel下有一个奇怪的文件:asm-offset.c。这个文件里面有一个main函数,而且里面的正文全是DEFINE(xxx, xxxx)的格式。这让阅读源码的人会感到困惑,这个文件的作用是什么呢?不卖关子:这个文件的目的是生成include/generated/asm-offsets.h。 include/generated/asm-offsets.h这个文件,里面定义了一些结构体内变量的相对偏移。通过这个宏,就可以在汇编代码中访问到结构体内的某一个成员的地址。 拿asm-offs

weixin_43876843的博客 613

从SYSCALL_DEFINE宏的工作原理理解Linux内核的系统调用

​​​↓ 展开为 ↓作用域和链接属性系统调用asmlinkage指定参数通过栈传递内部函数static限制文件作用域导出函数供模块使用内联函数性能优化。

zhilin_tang的专栏 1251

C语言中define的用法总结

1.简单的宏定义 #define 标识符 替换列表(替换列表可以是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量。注意:替换列表是可以为空的) 典型错误: #define N = 100 int a[N]; /*这样会成为int a[= 100],这里会处理成为一种标识记号一样*/     #define N 100; int a[N]

2429

内核黑科技之DEFINE宏

arch/arm/kernel/asm-offsets.c中会用到一个特殊的宏DEFINE,示例:DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));这句的意思就是将flags在struct thread_info中的偏移量赋值给TI_FLAGS,它会在vector_swi中使用。问题在于这个宏是怎么生效的呢? 首先找到DEFI

p0x1307的专栏 1447

C语言中宏定义#define用法总结。

1.简单的宏定义 #define 标识符 替换列表(替换列表可以是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量。注意:替换列表是可以为空的) 典型错误: #define N = 100 int a[N]; /*这样会成为int a[= 100],这里会处理成为一种标识记号一样*/ #define N 100; int a[N]; /*带分号的定义会成为int a

jiangchuanze的专栏 1万+

C语言中define的全部使用方法总结

学习了这么多年C语言,说实话对宏自以为了如指掌了,没想到看内核代码的时候还是那么吃力,设备驱动代码中有很多这样或者那样的宏定义,各种define,博主在学习的过程中将C语言中所出现的#define定义整理总结了一下,供大家借鉴和学习。 原来以为什么是宏?无非就是定义一个替换的量,好比#define PI 3.1415926,这样的功能,再深一点就是写一个类似函数的定义,好比#define MAX(...

qq_44165157的博客 1721

linux 中 __define_initcall 宏定义分析

__define_initcall 宏定 C 语言中attribute属性的section是在目标文件链接时可以用于主动定制代码的位置,我们看看linux kernel中section的定义。 下面代码来自 linux内核 include/linux/init.h 文件,它们使用了相同语法规则的变量名存放了各个初始化函数的地址。 它们的调用是按照一定顺序的,这个顺序就取决于__define_initcall宏。__define_initcall宏用来将指定的函数指针放到.initcall.init节里。 #

li的博客 2032
下一篇: 如何迁移SVN(转)
fcdmwind
博客等级 码龄19年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值