﻿# V608\. Recurring sequence of explicit type casts\.

The analyzer has detected repeating sequences consisting of explicit type conversion operators\. This code usually appears because of misprints and doesn't lead to errors\. But it's reasonable to check those code fragments the analyzer generates the V608 warning for\. Perhaps there is an error, or the code can be simplified at least\.

Consider this sample:

```cpp
m_hIcon = AfxGetApp()->LoadStandardIcon(
  MAKEINTRESOURCE(IDI_ASTERISK));
```

The analyzer generates the warning for this code:  V608 "Recurring sequence of explicit type casts: \(LPSTR\)\(ULONG\_PTR\)\(WORD\) \(LPSTR\)\(ULONG\_PTR\)\(WORD\)\."

Let's find out where we get the two chains "\(LPSTR\)\(ULONG\_PTR\)\(WORD\)" from\.

The constant value IDI\_ASTERISK is a macro of the following kind:

```cpp
#define IDI_ASTERISK MAKEINTRESOURCE(32516)
```

It means that the above cited code is equivalent to the following code:

```cpp
m_hIcon = AfxGetApp()->LoadStandardIcon(
  MAKEINTRESOURCE(MAKEINTRESOURCE(32516)));
```

The MAKEINTRESOURCE macro is expanded into \(LPSTR\)\(\(DWORD\)\(\(WORD\)\(i\)\)\)\. As a result, we get the following sequence:

```cpp
m_hIcon = AfxGetApp()->LoadStandardIcon(
  (LPSTR)((DWORD)((WORD)((LPSTR)((DWORD)((WORD)((32516))))))
);
```

This code will work correctly but it is surplus and can be rewritten without extra type conversions:

```cpp
m_hIcon = AfxGetApp()->LoadStandardIcon(IDI_ASTERISK);
```