可变参数函数指针的定义对于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 样式字符串是一个,但我不知道表的每一行都是字符串还是字符串数组,甚至是一个大字符串。
在我知道数据以何种形式传递到函数之前,我无法开始编写函数来解析输出数据中的数据。
我唯一可以肯定的是它返回一个 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
隐藏的内容。
相关文章:
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 如何在Vxworks中正确运行时钟获取时间以获得准确的时间
- 不能在 VxWorks RTP 应用程序中使用 sysAuxClkRateSet( int ticksPerSecond )
- 关闭VXWorks中非响应设备文件的端口的正确方法是什么?
- 我可以在不使用 FIOCANCEL 的情况下关闭 VxWorks 中的文件描述符吗?
- 如何为 VxWorks 创建 CMake 交叉编译工具链?
- vxworks中的多个RTP
- vxworks中的Mutex所有者和锁定状态
- C++ 11 in vxworks
- 为什么VxWorks中的缓冲区sendto()和send()函数的类型不同,以及我如何以相同的方式处理它们
- Apache Thrift 建立在 VxWorks 之上
- 什么可能会延迟 VxWorks 任务的抢占
- 如何在 VxWorks 中的条件变量中避免争用条件
- 将GetTickCount() vxWorks转换为Linux
- vxWorks-Workbench 6.8无法解析的c++符号
- vxWorks任务阻塞shell命令输入
- VxWorks与Eclipse -丢失的头文件
- 中断处理程序中的浮点操作(PowerPC, VxWorks)
- VxWorks 的 GCC 交叉编译器无法编译C++