我有一个使用hrtimer的驱动程序。我为以下函数定义
省略了参数名称enum hrtimer_restart (hr_toggle)(struct hrtimer *hrt)
{
<some code>
}
这段代码有什么问题?我给出了一个有效的结构。
更新:我还尝试使用相同的函数名称而没有括号。 结果是一样的。我正在使用ubuntu arm-linux-gnueabi-gcc中现有的标准arm gcc编译器
答案 0 :(得分:1)
“省略参数名称”是GCC系列编译器在(自然地)在函数定义中省略参数名称时给出的错误,在C中是不允许的。
最新的Clang和GCC版本实际上并不反对上面的声明(假设struct hrtimer
和enum hrtimer_restart
的定义),所以我的猜测是你没有使用其中一个,而是使用不完全符合C规范的不同编译器。问题中的代码是正确的,不应该被拒绝。
如果是这样,可能无法识别允许函数名称在括号中,并且错误地将hrtimer_restart
解析为函数名称,并将hr_toggle
作为第一个参数的类型(和...没有注意到enum
在放弃之前不是一种返回类型 - 奇怪的命令就是做事。)
从名称中删除括号,或者最好将编译器/编译器的设置更改为更完美的符合,应该处理此问题。
答案 1 :(得分:0)
我不知道这是如何工作的,但是将* hrt改为* t。
enum hrtimer_restart (hr_toggle)(struct hrtimer *t)
工作得很好。奇怪但真实。 hr_toggle周围的paranthesis无关紧要。