c - 函数 ptr 分配类型转换

标签 c struct pointer-to-member

我正在尝试执行以下操作:我不确定 - 这是正确的方法。或者我可能必须编写 Wrapper 函数,但我想有更好的方法。此外,将来其他开发人员希望使用来自另一个库、平台的哈希函数,这取决于不同目的的性能要求。

创建的结构:

typedef struct Hashctx{
    char inStream[BUFSIZ];
    char outHash[MAX_HASH];
    int (*Hashing)(char* DstBuf, size_t DstBufSize, \
           size_t *olen, char* SrcBuf, size_t SrcBufSize);
}Hashctx;
Hashctx App1;

并尝试初始化如下:

init()
{
#ifdef PLATFORM
    App1.Hashing = SHA1sumPlatform;
#elif
    App1.Hashing = SHA1sum;
#endif
}

虽然两个函数的参数相同,但返回类型不同。我遇到错误 cannot assigned be entity of type ...no definition for App1

int SHA1sum(...)
uint32_t SHA1sumPlatform(...)

我试过类型转换也没有解决错误

Hashing = (int)SHA1sumPlatform;

谢谢

最佳答案

在这一行 Hashing = (int)SHA1sumPlatform; 你试图用 int 转换一个 function pointer 这不是正确的方法转换函数指针。

如果您确定 int 是您想要的正确返回类型,请执行以下操作:

typedef int (*HashingFnType)(char* DstBuf, size_t DstBufSize, \
           size_t *olen, char* SrcBuf, size_t SrcBufSize); 

typedef struct Hashctx{
    char inStream[BUFSIZ];
    char outHash[MAX_HASH];
    HashingFnType Hashing ;
}Hashctx;

init()
{
#ifdef PLATFORM
    Hashing = (HashingFnType)SHA1sumPlatform;
#elif
    Hashing = (HashingFnType)SHA1sum;
#endif
}

注意:要转换具有不同类型的函数指针,两种类型应该兼容。阅读更多关于它的信息 here .

关于c - 函数 ptr 分配类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54759287/

相关文章:

c - 如何将Go的[]byte转换为C的*uint8_t

pointers - 在 Go-lang 中返回对结构的引用

c - 尝试了解在迭代反转链表时列表如何被修改

c++ - 重载成员函数指针的转换助手

c - gdb:在特定库中设置断点

c - 查找进程 linux(C 代码)的打开文件描述符?

c - Hook 窗口消息循环 WM_CLOSE

c - 结构中字节数组的对齐

go - golang类型[] dao.Record没有字段或方法ID

c++ - 将类成员函数作为参数传递给全局函数