Я получаю сообщение MISRA-C 2012 Rule 10.5, ниже приведен пример кода:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
typedef long long sint64;
typedef unsigned long long uint64;
typedef unsigned long uint32;
#define ntohll(x) ( ( (uint64)(ntohl( ((x << 32) >> 32) )) << 32) | ntohl( ((uint32)(x >> 32)) ) )
void main()
{
sint64 pul_total;
sint64 a;
pul_total = ntohll(a); /* Rule 10.8 Violation*/
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ для решения проблемы, которую я попытался выполнить ниже:
#define ntohll(x) ( ( (uint64)(ntohl( ((x << 32) >>(uint32)32) )) << (uint32)32) | ntohl( ((uint32)(x >>(uint32) 32)) ) )
но все же это разочарование
Однако, если я сделаю это, как показано ниже, нарушение будет удалено:
#define ntohll(x) ( ( (uint64)(ntohl( ((x << 32) >> 32) )) << 32) | ntohl( ((uint32)((uint32)x >> 32)) ) )
но, согласно моему пониманию, преобразование подписанной переменной в unsigned может быть не очень хорошей идеей в случаесменная операция.
Нужна помощь для того же ...