我有这个方法(简化):
void addraw(struct chain*a, uint8_t *data).
重点是我可以从以下函数中调用它:
void adduint16(struct chain*a, uint16_t val)
{
uint8_t x[2] = {0};
memcpy(x, &val, 2);
addraw(chain, x);
}
现在说我有没有方法:
void addstr(struct chain*a, char* val)
我可以轻松做到:
void addstr(struct chain*a, char* val)
{
addraw(chain, (uint8_t*) val);
}
但我认为将 char *
作为 uint8_t
指针等传递并不总是可以的。
那么这样的原型(prototype)有addraw函数是不是更好呢?
void addraw(struct chain*a, void *data)
我会避免转换问题吗?仍然使用 Like I desire?例如,如上所示,使用整数和字符串
最佳答案
would [the prototype with
void*
] avoid the cast problem?
是的,带有 void*
的原型(prototype)可以让您避免在调用点强制转换指针。
[can I] use Like I desire?
这取决于您想要做什么:如果您打算将 data
指针指向的数据解释为指向未签名数据的数据,并改为传递已签名数据,您将获得实现 -具体行为。如果您需要做的只是将“原始”数据从一个缓冲区复制到另一个缓冲区,void*
是一个完美的选择。
关于函数的通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25828602/