【问题标题】:argument doesn't match prototype error in LinuxLinux 中的参数与原型错误不匹配
【发布时间】:2012-05-21 07:35:24
【问题描述】:

我有以下函数声明的头文件:

extern  getEmailDetailsResult * getemaildetails_5(getEmailDetailsInput *, CLIENT *);

在我的.C文件中,函数定义是

getEmailDetailsResult* getemaildetails_5(inputParams, rqstp)
    getEmailDetailsInput *inputParams;
    struct svc_req *rqstp;

当我在 Unix 中编译我的程序时,编译成功。但在 Linux (gcc 4.1.2) 中,我收到以下错误 "error: argument ârqstpâ doesnât match prototype"。具有函数原型的 .h 文件是由操作系统在编译过程中生成的。 Linux 中的错误可能是什么原因?

【问题讨论】:

  • CLIENT 是如何声明的?如果将extern 原型中的CLIENT 更改为struct svc_req,Linux 构建是否会停止抱怨?
  • 嗨 Michael, 声明函数原型的头文件是 rpcgen 在编译过程中生成的“api.h”。因此,我想不可能更改原型定义。在 Unix 中,rpcgen 生成的 api.h 包含函数原型为“extern getEmailDetailsResult * getemaildetails_5();”并且程序编译没有错误。
  • 即使生成了文件,您也可能需要安排尝试该建议(或者查看CLIENTis 的内容)。了解实际情况是弄清楚如何最好地解决问题的第一步。根据您的评论,您可能会采用另一种方法来弄清楚为什么在 Unix 系统上api.h 只有一个函数声明(严格来说它不是原型),而在 Linux 上却生成了一个完整的原型。第三件事是看看在 Linux 上你是否可以说服系统使用 ANSI/ISO 风格的参数声明来生成函数定义。
  • 通过更改头文件中的函数声明(修改CLIENT *为“struct svc_req *”),错误已被清除。非常感谢!

标签: c linux struct function-prototypes


【解决方案1】:

看起来struct svc_req * 指针不等于CLIENT * 指针。

【讨论】:

  • 您好 Jens,但 .h 文件是 rpcgen 在编译期间生成的。
  • 嗯,可能是这样,但要深入了解根本原因,您必须确定 CLIENT 是什么类型。如果它与struct svc_req 不同,那是您的问题。您可能不正确地使用 rpcgen,但这几乎是不可能从远处诊断出来的。
【解决方案2】:

您有两个指针,struct svc_req *CLIENT *。您收到此错误是因为这两个指针都指向不同的类型。那就是struct svc_reqCLIENT不是一回事,所以两个指针不兼容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2020-02-12
    • 2016-03-03
    • 1970-01-01
    • 2017-03-07
    • 2017-10-17
    • 1970-01-01
    相关资源
    最近更新 更多