☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

避免与 void* 相互转换

12.5 ID_voidCast
目录 › next › previous

与 void* 相互转换会打破类型限制,是不安全的类型转换。

C 语言的某些标准接口会使用 void*,可不受本规则限制,但在 C++ 代码中应避与 void* 相互转换。

示例:

struct A { .... };

void foo(void* v) {
    A* a = (A*)v;     // Non-compliant
    ....
}

例中参数 v 可以随意接受非 A 对象的指针,进而导致标准未定义的行为,代码的正确性单方面依赖开发者是不可靠的。

相关

ID_forbidMemberVoidPtr ID_forbidFunctionVoidPtr

依据

ISO/IEC 14882:2003 5.2.10(7)-unspecified ISO/IEC 14882:2011 5.2.10(7)-unspecified

参考

MISRA C 2012 11.5 MISRA C 2012 11.6 MISRA C++ 2008 5-2-8
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.