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

时间:2014-11-05 06:24:04

标签: c linux linux-kernel linux-device-driver

我有一个使用hrtimer的驱动程序。我为以下函数定义

省略了参数名称
enum hrtimer_restart (hr_toggle)(struct hrtimer *hrt)
{

    <some code>

}

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

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

2 个答案:

答案 0 :(得分:1)

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

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

如果是这样,可能无法识别允许函数名称在括号中,并且错误地将hrtimer_restart解析为函数名称,并将hr_toggle作为第一个参数的类型(和...没有注意到enum在放弃之前不是一种返回类型 - 奇怪的命令就是做事。)

从名称中删除括号,或者最好将编译器/编译器的设置更改为更完美的符合,应该处理此问题。

答案 1 :(得分:0)

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

enum hrtimer_restart (hr_toggle)(struct hrtimer *t)

工作得很好。奇怪但真实。 hr_toggle周围的paranthesis无关紧要。