这个通用功能有什么作用?

前端之家收集整理的这篇文章主要介绍了这个通用功能有什么作用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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属性(下面将解释):

format (archetype,string-index,first-to-check):

The format attribute specifies that a function takes printf,scanf,strftime or strfmon style arguments which should be type-checked against a format string. For example,the declaration:

extern int my_printf (void *my_object,const char *my_format,...)
    __attribute__ ((format (printf,2,3)));

causes the compiler to check the arguments in calls to my_printf for consistency with the printf style format string argument my_format.

In the example above,the format string (my_format) is the second argument of the function my_print,and the arguments to check start with the third argument,so the correct parameters for the format attribute are 2 and 3.

The format attribute allows you to identify your own functions which take format strings as arguments,so that GCC can check the calls to these functions for errors.

至于函数本身的作用,除了返回零之外没有太多:-)

如果您希望实际实现真正的dev_err()函数,那几乎可以肯定是一个占位符.

猜你在找的C&C++相关文章