Start here

Home
About Klocwork
What's new
Fixed issues
Release notes
Installation

Reference

C/C++ checkers
Java checkers
C# checkers
MISRA C 2004 checkers
MISRA C++ 2008 checkers
MISRA C 2012 checkers
MISRA C 2012 checkers with Amendment 1
Commands
Metrics
Troubleshooting
Reference

Product components

C/C++ Integration build analysis
Java Integration build analysis
Desktop analysis
Refactoring
Klocwork Static Code Analysis
Klocwork Code Review
Structure101
Tuning
Custom checkers

Coding environments

Visual Studio
Eclipse for C/C++
Eclipse for Java
IntelliJ IDEA
Other

Administration

Project configuration
Build configuration
Administration
Analysis performance
Server performance
Security/permissions
Licensing
Klocwork Static Code Analysis Web API
Klocwork Code Review Web API

Community

View help online
Visit RogueWave.com
Klocwork Support
Rogue Wave Videos

Legal

Legal information

MISRA.CAST.PTR_TO_INT

Cast converts pointer to integral type.

MISRA-C Rule 11.3 (advisory): A cast should not be performed between a pointer type and an integral type.

[Implementation 24]

The size of integer that is required when a pointer is converted to an integer is implementation defined. Casting between a pointer and an integer type should be avoided where possible, but may be unavoidable when addressing memory mapped registers or other hardware specific features.

MISRA-C++ Rule 5-2-9 (advisory): A cast should not convert a pointer type to an integral type.

[Implementation 5.2.10(4, 5)]

Rationale

The size of integer that is required when a pointer is converted to an integer is implementation-defined. Casting between a pointer and an integer type should be avoided where possible, but may be unavoidable when addressing memory mapped registers or other hardware specific features. Note that C++ does not permit a pointer to be converted to any floating type.

Example

struct S
{
   int32_t i;
   int32_t j;
};

void f ( S * s )
{
   int32_t p = reinterpret_cast< int32_t >( s );  // Non-compliant
}