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

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++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录<future>future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...