к полной проверке условия. Например,
ASSERT ( FALSE == IsBadWriteStringPtr ( szltem, iLen));
}
Следует всегда стремиться к полной проверке условия. Например, если контролируемая функция в качестве параметра принимает указатель на функцию, и вы просто проверяете этот параметр на равенство значению NULL
(пустому указателю), то охватываете при этом только часть ошибочного условия. Если произойдет переполнение стека (при котором параметр функции перепишется и примет значение, равное 1), то следующее утверждение не укажет неудачного условия, однако позднее программа все же закончится аварийно.
// Пример проверки только части ошибочного условия
BOOL EnumerateListltems ( PFNELCALLBACK pfnCallback)
{
ASSERT ( NULL != pfnCallback);
}
Для полной проверки корректности указателя, в операторе ASSERT можно также использовать API-функцию isBadCodePtr:
// Пример полной проверки ошибочного условия
BOOL EnumerateListltems (PFNELCALLBACK pfnCallback)
{
ASSERT ( FALSE = IsBadCodePtr ( pfnCallback));
}
Второе правило: в операторах утверждений нужно точно определять условия проверки, чтобы проверялись только те значения, которые указаны явно. В следующем примере показан сначала неправильный способ проверки положительного значения, а затем — правильный.
Пример неправильного определения аргумента оператора утверждения:
отрицательное значение nCount не будет обнаружено функцией утверждения.
Function UpdateListEntries(ByVal nCount As Integer) as Integer
Debug.Assert nCount
.
.
.
End Function
' Здесь аргумент вызова определен так (nCount>0) , что Assert-функция
' правильно отреагирует на отрицательное значение nCount
Function UpdateListEntries(ByVal nCount As Integer) as Integer
Debug.Assert nCount > 0
.
.
.
End Function
В первом примере, по существу, проверяются все значения nCount, не равные нулю, так что неправильные значения параметра (nCount <= 0) не будут обнаружены функцией Assert. Во втором условие проверки сформулировано точнее (nCount > 0), так что утверждение, во-первых, оказывается самодокументированным (т.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий