You are on page 1of 7

C++Builder

:
: 14.05.2013
, Embarcadero C++Builder XE3. ,
inline-.
, .

, , . ,
, Visual C++ 2012. :
" Visual C++ 2012".
Visual C++ . C++Builder .
. inline-. ,
- . .


#pragma warning(disable : 4115)
#include <objbase.h>
#pragma warning(default : 4115)
, PVS-Studio:
V665 Possibly, the usage of '#pragma warning(default: X)' is incorrect in this context. The '#pragma
warning(push/pop)' should be used instead. Check lines: 16, 18. iaguid.h 18
.
, , .
"#pragma warning(push[ ,n ])" "#pragma warning(pop)".


#define SET_VTYPE_AND_VARREF(type, val) \
this->vt = VT_ ## type | VT_BYREF; \
V_ ## type ## REF (this) = val;

TVariantT& operator=(System::Currency* src)

{
Clear();
if(src)
SET_VTYPE_AND_VARREF(CY,
reinterpret_cast<tagCY*>(&(src->Val)));
return* this;
}
, PVS-Studio:
V640 The code's operational logic does not correspond with its formatting. The second statement will
always be executed. It is possible that curly brackets are missing. utilcls.h 1781
SET_VTYPE_AND_VARREF .
{ }. "if (src)" .


#define _BITS_BYTE

template<class _Uint,
_Uint _Ax,
_Uint _Cx,
_Uint _Mx>
class linear_congruential
{
static _CONST_DATA int _Nw =
(_BITS_BYTE * sizeof (_Uint) + 31) / 32;

void seed(seed_seq& _Seq)


{
_Uint _Arr[3 + _Nw];
....
int _Lsh = _BITS_BYTE * sizeof (_Uint);

....

for (int _Idx = _Nw; 0 < --_Idx; )


_Arr[3 + _Idx - 1] |=
_Arr[3 + _Idx] << _Lsh;
....
}
}
, PVS-Studio:
V610 Instantiate linear_congruential < unsigned long, 40014, 0, 2147483563 >: Undefined behavior. Check
the shift operator '<<. The right operand '_Lsh' is greater than or equal to the length in bits of the promoted
left operand. random 738
, '_Lsh' 32. 32- ,
31 . : The behavior is undefined if the right operand is negative, or greater
than or equal to the length in bits of the promoted left operand.
, DXVABitMask:
#define DXVABitMask(__n) (~((~0) << __n))
: Otherwise, if E1 has a signed type and nonnegative value, and E1*2^E2 is representable in the result type, then that is the resulting value; otherwise,
the behavior is undefined.
- , PVS-Studio . :
V610 Undefined behavior. Check the shift operator '<<. The left operand '(~0)' is negative. dxva.h 1080
: ,
. .

new.
, 'new', ,
NULL. . ,
'new' std::bad_alloc.
'new', . C++Builder
:

#define NEW_NOTHROW(_bytes) new (nothrow) BYTE[_bytes]


.
:
inline void _bstr_t::Assign(BSTR s) throw(_com_error)
{
if (m_Data != NULL) {
m_Data->Assign(s);
}
else {
m_Data = new Data_t(s, TRUE);
if (m_Data == NULL) {
_com_issue_error(E_OUTOFMEMORY);
}
}
}
, PVS-Studio:
V668 There is no sense in testing the 'm_Data' pointer against null, as the memory was allocated using the
'new' operator. The exception will be generated in the case of memory allocation error. comutil.h 454
"_com_issue_error(E_OUTOFMEMORY);" .
std::bad_alloc().

static inline BYTE *__CorHlprNewThrows(size_t bytes)


{
BYTE *pbMemory = new BYTE[bytes];
if (pbMemory == NULL)
__CorHlprThrowOOM();
return pbMemory;
}
, PVS-Studio:

V668 There is no sense in testing the 'pbMemory' pointer against null, as the memory was allocated using
the 'new' operator. The exception will be generated in the case of memory allocation error. corhlpr.h 56

template<class TYPE, class ARG_TYPE>


void CDXArray<TYPE, ARG_TYPE>::SetSize(int nNewSize, int nGrowBy)
{
....
TYPE* pNewData = (TYPE*) new BYTE[nNewMax * sizeof(TYPE)];

// oh well, it's better than crashing


if (pNewData == NULL)
return;
....
}
, PVS-Studio:
V668 There is no sense in testing the 'pNewData' pointer against null, as the memory was allocated using
the 'new' operator. The exception will be generated in the case of memory allocation error. dxtmpl.h 338

, .
:

V668 There is no sense in testing the 'p' pointer against null, as the memory was allocated using the
'new' operator. The exception will be generated in the case of memory allocation error.
d3dx10math.inl 1008
V668 There is no sense in testing the 'p' pointer against null, as the memory was allocated using the
'new' operator. The exception will be generated in the case of memory allocation error. dxtmpl.h
123
V668 There is no sense in testing the 'pNewData' pointer against null, as the memory was allocated
using the 'new' operator. The exception will be generated in the case of memory allocation error.
dxtmpl.h 395
V668 There is no sense in testing the 'm_pHashTable' pointer against null, as the memory was
allocated using the 'new' operator. The exception will be generated in the case of memory
allocation error. dxtmpl.h 1126

V668 There is no sense in testing the 'newBrush' pointer against null, as the memory was allocated
using the 'new' operator. The exception will be generated in the case of memory allocation error.
gdiplusbrush.h 44
V668 There is no sense in testing the 'retimage' pointer against null, as the memory was allocated
using the 'new' operator. The exception will be generated in the case of memory allocation error.
gdiplusbrush.h 374
V668 There is no sense in testing the 'argbs' pointer against null, as the memory was allocated using
the 'new' operator. The exception will be generated in the case of memory allocation error.
gdiplusbrush.h 615
V668 There is no sense in testing the 'argbs' pointer against null, as the memory was allocated using
the 'new' operator. The exception will be generated in the case of memory allocation error.
gdiplusbrush.h 645
V668 There is no sense in testing the 'argbs' pointer against null, as the memory was allocated using
the 'new' operator. The exception will be generated in the case of memory allocation error.
gdipluspath.h 1196
V668 There is no sense in testing the 'argbs' pointer against null, as the memory was allocated using
the 'new' operator. The exception will be generated in the case of memory allocation error.
gdipluspath.h 1231
V668 There is no sense in testing the 'argbs' pointer against null, as the memory was allocated using
the 'new' operator. The exception will be generated in the case of memory allocation error.
gdipluspath.h 1372
V668 There is no sense in testing the 'argbs' pointer against null, as the memory was allocated using
the 'new' operator. The exception will be generated in the case of memory allocation error.
gdipluspath.h 1405
V668 There is no sense in testing the 'newLineCap' pointer against null, as the memory was
allocated using the 'new' operator. The exception will be generated in the case of memory
allocation error. gdipluslinecaps.h 153
V668 There is no sense in testing the 'nativeRegions' pointer against null, as the memory was
allocated using the 'new' operator. The exception will be generated in the case of memory
allocation error. gdiplusgraphics.h 1415
V668 There is no sense in testing the 'newRegion' pointer against null, as the memory was allocated
using the 'new' operator. The exception will be generated in the case of memory allocation error.
gdiplusregion.h 89
V668 There is no sense in testing the 'nativeFamilyList' pointer against null, as the memory was
allocated using the 'new' operator. The exception will be generated in the case of memory
allocation error. gdiplusfontcollection.h 57
V668 There is no sense in testing the 'newImage' pointer against null, as the memory was allocated
using the 'new' operator. The exception will be generated in the case of memory allocation error.
gdiplusbitmap.h 334
V668 There is no sense in testing the 'bitmap' pointer against null, as the memory was allocated
using the 'new' operator. The exception will be generated in the case of memory allocation error.
gdiplusbitmap.h 819

V668 There is no sense in testing the 'bitmap' pointer against null, as the memory was allocated
using the 'new' operator. The exception will be generated in the case of memory allocation error.
gdiplusbitmap.h 862
V668 There is no sense in testing the 'm_pData' pointer against null, as the memory was allocated
using the 'new' operator. The exception will be generated in the case of memory allocation error.
spcollec.h 266
V668 There is no sense in testing the 'pNewData' pointer against null, as the memory was allocated
using the 'new' operator. The exception will be generated in the case of memory allocation error.
spcollec.h 325

inline-! , *.cpp . :)

, , Embarcadero C++Builder XE4. ,


PVS-Studio.

. , C++Builder
PVS-Studio . ,
:
1.
2.
3.
4.

PVS-Studio. .
. C++Builder, 64- Viva64.
@Code_Analysis. /++.
, PVS-Studio. , Open Source
PVS-Studio .