可变参数函数指针的定义对于VxWorks spyLib来说不清楚

Variadic Function Pointer definition is unclear for VxWorks spyLib

本文关键字:VxWorks spyLib 说不清楚 定义 参数 变参 函数 指针      更新时间:2023-10-16

我正在使用VxWorks 6.9并尝试使用一些spyLib.h函数,但是由于类型是可变的,因此我无法找到预期的签名。

vxTypesOld.h我找到了我的类型:typedef int (*FUNCPTR) (...);

spyLib.h中,我有我的函数调用:extern void spyReportCommon (FUNCPTR printRtn);

但是 printRtn 需要哪些函数参数?我想 c 样式字符串是一个,但我不知道表的每一行都是字符串还是字符串数组,甚至是一个大字符串。

在我知道数据以何种形式传递到函数之前,我无法开始编写函数来解析输出数据中的数据。

我唯一可以肯定的是它返回一个 int(例如int parsePrint( ???? );(

这是我的报道尝试:

#include <vxworks.h>
#include <spyLib.h>
#include <usrLib.h>
int ParseSpy(const char * spyOutput); // this is a guess
void Startup()
{
//startup logic
// the compiler said and int param is expected but the .h had void
spyLibInit(1); 
spyCommon(1,50, (FUNCPTR) &ParseSpy);
}
int ParseSpy(const char * spyOutput){} // this is a guess

我收到意外的编译器错误:"spyCommon"未在范围内声明 但正如你所看到的,spyLib.h 被包括在内,所以我对此有点困惑。

这看起来是一个糟糕的设计。如果打印函数不知道参数是什么,则无法打印。至少需要一个参数来指定其余参数是什么。

查看源代码并搜索"printRtn",我发现所有对打印函数的调用都需要一个类似printf函数,其中第一个参数是格式字符串。你的函数最好写成

int ParseSpy(const char * spyOutput, ...);

关于缺少spyCommon您可以尝试让VxWorks将预处理器输出写入文件以检查编译器看到的内容。也许您得到了错误的spylib.h文件或该文件被#if隐藏的内容。