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

标签 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 编译器

最佳答案

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

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

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

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

关于c - 函数返回枚举的参数名称省略错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26750931/

相关文章:

无法使用 openssl 将 X509 对象读入临时文件以进行 Windows C 编程

linux - Bash,在具有多组此类行的文件中使用指定字符串的两行之间进行 grep

c - 在 spin_lock_init 和 DEFINE_SPINLOCK AND WHEN 之间更喜欢什么

linux-kernel - uboot : What is DECLARE_GLOBAL_DATA_PTR?

logging - 如何从 Android 内核 panic 上传模式中提取内核 panic 日志?

c - 我有一个嵌入式项目想法,我想开始。我有很多问题

C: execve: 我必须为 shell 实现管道,但是我似乎无法从第二个管道中得到最终结果

c++ - 使用 opencv2 加载图像时 OpenCv 未处理的异常

linux - 导出此代码的 shell 变量输出

c - 警告 : implicit declaration of function only when using -std=c99