参数名称省略错误返回枚举的函数

我有一个使用hrtimer的驱动程序。 下面的函数定义中省略了参数名称

enum hrtimer_restart (hr_toggle)(struct hrtimer *hrt) { <some code> } 

这段代码有什么问题? 我已经给了一个有效的结构。

更新:我也试图使用相同的没有括号的函数名称。 结果是一样的。 我正在使用ubuntu arm-linux-gnueabi-gcc中现有的标准arm gcc编译器

“参数名省略”是GCC族编译器在(自然地)在函数定义中省略了一个参数的名称时给出的错误,这在C中是不允许的

最新的Clang和GCC版本实际上并不反对上面的声明(假设struct hrtimerenum hrtimer_restart定义),所以我猜测你没有使用其中的一个,而是使用不完全不同的编译器符合C规范。 问题中的代码是正确的,不应该被拒绝。

如果是这样的话,可能不会认识到函数名被放在括号中,并且已经错误地解析了hrtimer_restart作为函数名,而hr_toggle作为第一个参数的类型(并且…还没有注意到enum不是放弃之前的返回类型 – 奇怪的顺序做事情)。

从名称中删除括号,或者最好将编译器/编译器的设置更改为更加完全兼容的东西,应该解决这个问题。

我不知道这是如何工作的,但将* hrt改成* t起作用。

 enum hrtimer_restart (hr_toggle)(struct hrtimer *t) 

工作得很好。 奇怪,但真实。 hr_toggle周围的假设并不重要。