【发布时间】: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