VxWorks spyLib 的可变函数指针定义不清楚
Variadic Function Pointer definition is unclear for VxWorks spyLib
我正在使用 VxWorks 6.9 并尝试使用一些 spyLib.h
函数,但我在寻找预期的签名时遇到问题,因为类型是可变的。
在 vxTypesOld.h
我找到我的类型:typedef int (*FUNCPTR) (...);
并且在 spyLib.h
中我有我的函数调用:extern void spyReportCommon (FUNCPTR printRtn);
但是 printRtn 需要哪些函数参数?我猜 c 风格的字符串是一个,但我不知道 table 的每一行是一个字符串还是它是一个字符串数组,甚至是一个大字符串。
在我知道数据以何种形式传递到函数中之前,我无法开始编写从输出数据中解析数据的函数。
我唯一确定的是它 returns 是一个整数(例如 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 被包括在内,所以我对此有点困惑。
这看起来是个糟糕的设计。如果不知道参数是什么,打印函数将无法打印。至少需要一个参数来指定其余参数是什么。
查看 source 并搜索 "printRtn" 我发现所有对 print 函数的调用都需要一个 printf
类函数,其中第一个参数是格式字符串。你的函数最好写成
int ParseSpy(const char * spyOutput, ...);
关于缺失的spyCommon
,您可以尝试让 VxWorks 将预处理器输出写入文件以检查编译器看到的内容。也许你得到了错误的 spylib.h
文件或文件被 #if
.
隐藏的东西
我正在使用 VxWorks 6.9 并尝试使用一些 spyLib.h
函数,但我在寻找预期的签名时遇到问题,因为类型是可变的。
在 vxTypesOld.h
我找到我的类型:typedef int (*FUNCPTR) (...);
并且在 spyLib.h
中我有我的函数调用:extern void spyReportCommon (FUNCPTR printRtn);
但是 printRtn 需要哪些函数参数?我猜 c 风格的字符串是一个,但我不知道 table 的每一行是一个字符串还是它是一个字符串数组,甚至是一个大字符串。
在我知道数据以何种形式传递到函数中之前,我无法开始编写从输出数据中解析数据的函数。
我唯一确定的是它 returns 是一个整数(例如 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 被包括在内,所以我对此有点困惑。
这看起来是个糟糕的设计。如果不知道参数是什么,打印函数将无法打印。至少需要一个参数来指定其余参数是什么。
查看 source 并搜索 "printRtn" 我发现所有对 print 函数的调用都需要一个 printf
类函数,其中第一个参数是格式字符串。你的函数最好写成
int ParseSpy(const char * spyOutput, ...);
关于缺失的spyCommon
,您可以尝试让 VxWorks 将预处理器输出写入文件以检查编译器看到的内容。也许你得到了错误的 spylib.h
文件或文件被 #if
.