我有下面的函數聲明的頭文件:參數不匹配的原型錯誤的Linux
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文件在編譯期間由OS生成。 Linux中可能導致錯誤的原因是什麼?
如何聲明CLIENT?如果將'extern'原型中的'CLIENT'更改爲'struct svc_req',Linux構建會停止抱怨嗎? –
嗨邁克爾,聲明函數原型的頭文件是在編譯過程中由rpcgen生成的「api.h」。因此,我想不可能改變原型定義。在Unix中,由rpcgen生成的api.h包含函數原型爲「extern getEmailDetailsResult * getemaildetails_5();」並且程序編譯沒有錯誤。 – Blackforest
即使生成了這些文件,您也可能想要安排嘗試該建議(或者查看「CLIENT」是什麼)。瞭解實際情況是確定如何最好地解決問題的第一步。根據你的評論,你可能需要另一種方法來弄清楚爲什麼在Unix系統上'api.h'只有一個函數聲明(嚴格來說,它不是一個原型),而在Linux上生成一個完整的原型。第三件要看的事情是看看在Linux上你是否可以說服系統使用ANSI/ISO風格的參數聲明來生成函數定義。 –