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:

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:

#define IDI_ASTERISK MAKEINTRESOURCE(32516)

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

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:

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:

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

Bugs Found

Checked Projects
364
Collected Errors
13 504