这个通用功能有什么作用?
static inline __printf(2,3) int dev_err(const struct device *dev,const char *fmt,...) { return 0; } 什么是__printf()正在做什么以及dev_err的第三个arg(…)是什么意思? 解决方法
除了__printf(2,3)之外,其他所有内容都非常标准(可变参数处理).
函数的这个修饰符(类似于静态或内联修饰符)告诉编译器它应该使用printf样式格式说明符检查参数2(fmt)处的格式字符串与从参数3开始的实际参数. 换句话说,用以下方法调用它: dev_err (pDev,"%d",1.0); 会标记警告,因为格式字符串和实际参数不匹配. …只是表示格式字符串后面有可变数量的参数,类似于printf本身的实现方式. C长期以来有能力处理变量参数列表,__ printf()修饰符只是给编译器一些额外的信息,以便它可以验证你对函数的使用. Linux将__printf(a,b)定义为__attribute __((format(printf,a,b)))并且gcc允许第二种格式根据here指定varargs-checking属性(下面将解释):
extern int my_printf (void *my_object,const char *my_format,...) __attribute__ ((format (printf,2,3)));
至于函数本身的作用,除了返回零之外没有太多:-) 如果您希望实际实现真正的dev_err()函数,那几乎可以肯定是一个占位符. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |