我遇到了一种通知内核有关char设备的方法:
test
test
从int cdev_add(struct cdev *, dev_t, unsigned);
中并不清楚,如何传递未命名的参数(有两个没有名称的参数-第二和第三)。而且,第三个参数<linux/cdev.h>
具有部分类型(unsigned int?char?long?...)。我在某处读过,是为了函数重载以“选择”正确的构造函数,但是如果这样,不应该在头文件中声明更多这些构造函数?(但是没有),那么我该如何引用此类参数没有名字?
答案 0 :(得分:3)
此(from here):
int cdev_add(struct cdev *, dev_t, unsigned);
是一个函数声明。它指定函数采用的三个参数的类型以及返回类型:在这种情况下,函数返回一个int
,并以一个struct cdev *
,一个dev_t
和一个{ {1}}。通常在头文件(unsigned
)中完成此操作,该头文件随后会包含在内,以使编译器知道该函数处理和返回了哪些类型。
没有参数名称这一事实 不是 并不意味着参数是可选的。 C中没有“可选参数”之类的东西,最接近的是通过variadic arguments(只能在参数列表的末尾使用),但是您必须定义整个行为你自己有效的函数声明也可以指定参数名称,但这不是必需的。
此(from here):
.h
是函数定义。它必须定义所有参数名称和函数主体,其中包含实际代码。
答案 1 :(得分:2)
匿名(未命名)参数有两个用途:
dumb
或unused
,请参见下面),因此只需查看原型的一个视图,就可以猜出它的用途。