0
我试图做一些代码MISRA投诉,我有如下一段代码:对象指针类型“gpointer”投给无关的类型“字符串*”
static void DBusCallback(GObject *object, GAsyncResult *res, gpointer user_data) {
std::string * const tmp = reinterpret_cast<std::string*>(user_data);
...
其中DBusCallback是回调call_DBus:
(void)call_DBus(proxy, NULL, &DBusCallback, reinterpret_cast<void*>(new std::string(user_data)));
//最后PRAM是从回调
它编译并运行正常中的用户数据,但我有以下MISRA的字符串转换,从gpointer警告: MISRA.CAST.PTR.UNRELATED:指针类型'gpointer'的对象转换为无关类型'字符串*'
规则是: MISRA-C++规则5-2-7(必需):带指针的对象类型不应直接或间接转换为不相关的指针类型。 [Unspecified 5.2.10(7)] 原理 未指定将指针转换为不相关类型的结果。
任何想法,以避免此警告?
你确定它工作正常?什么是'gpointer'?我看不出它是如何工作的,除非它是一个指向'std :: string'的指针。 – juanchopanza
是的,它的工作原理。我创建了新的std :: string,将其转换为void *,然后在回调函数中再次转换为std :: string。 Gpointer是:typedef void * gpointer; – user3458705
那么,MISRA旨在阻止你做这样的事情。因此,摆脱警告的最好方法是确保您始终具有相同的正确类型。此外,MISRA也禁止函数指针,所以你不能执行'&DBusCallback' ... – Lindydancer