C 参数不';Linux中的t匹配原型错误
我有具有以下函数声明的头文件:C 参数不';Linux中的t匹配原型错误,c,linux,struct,function-prototypes,C,Linux,Struct,Function Prototypes,我有具有以下函数声明的头文件: extern getEmailDetailsResult * getemaildetails_5(getEmailDetailsInput *, CLIENT *); 在my.C文件中,函数定义是 getEmailDetailsResult* getemaildetails_5(inputParams, rqstp) getEmailDetailsInput *inputParams; struct svc_req *rqstp; 当我在Un
extern getEmailDetailsResult * getemaildetails_5(getEmailDetailsInput *, CLIENT *);
在my.C文件中,函数定义是
getEmailDetailsResult* getemaildetails_5(inputParams, rqstp)
getEmailDetailsInput *inputParams;
struct svc_req *rqstp;
当我在Unix中编译程序时,编译是成功的。但是在Linux(GCC4.1.2)中,我得到以下错误“错误:参数–rqstp–与原型不匹配”
。具有函数原型的.h文件由操作系统在编译期间生成。
Linux中的错误原因可能是什么?看起来
struct svc_req*
指针与CLIENT*
指针不同。您有两个指针,struct svc_req*
和CLIENT*
。出现此错误是因为两个指针各自指向不同的类型。这是一个struct svc_req
与CLIENT
不是同一类型的东西,因此这两个指针不兼容。如何声明CLIENT
?如果将extern
原型中的CLIENT
更改为struct svc_req
,Linux构建是否停止抱怨?嗨,Michael,声明函数原型的头文件是“api.h”,它是由rpcgen在编译期间生成的。因此,我想不可能更改原型定义。在Unix中,由rpcgen生成的api.h包含函数原型“extern getEmailDetailsResult*getemaildetails_5();”,程序编译时没有错误。即使生成了文件,您也可能希望安排尝试该建议(或者查看客户端是什么)。了解实际情况是找出最佳解决方法的第一步。根据您的评论,您可以使用另一种方法来了解为什么在Unix系统上api.h
只有一个函数声明(严格地说,它不是原型),而在Linux上生成一个完整的原型。第三件要看的事情是,在Linux上,您是否可以说服系统使用ANSI/ISO样式的参数声明生成函数定义。通过更改头文件中的函数声明(将CLIENT*修改为“struct svc_req*”),错误已被清除。谢谢!您好,Jens,.h文件是由rpcgen在编译过程中生成的。嗯,可能是这样,但要找到根本原因,您必须确定客户机是什么类型的。如果它与结构svc_req不同,那就是您的问题。您可能不正确地使用了rpcgen,但这几乎不可能从远处进行诊断。