﻿# Cannot process the whole file "foo\.cpp"

Анализатор PVS\-Studio не всегда может полностью проанализировать файл с исходным кодом\. Причины могут быть разные\. Возможно, анализатор не смог разобрать особенно сложный шаблон или что\-то еще\. Такое редко, но все же случается\. Как правило, это несущественно с точки зрения анализа, так как непроанализированным остается совсем небольшой участок кода\. Поэтому предупреждение "Cannot process the whole file" выдается анализатором PVS\-Studio только, если в настройках включен режим "Pedantic mode"\.

В этой заметке я хочу уточнить, что в возникновении "Cannot process the whole file" не всегда виноват анализатор PVS\-Studio\. В ряде случаев, текст программы может действительно содержать ошибку, которую, тем не менее, игнорирует компилятор Visual C\+\+\. Такое случается, когда ошибка находится в теле функции шаблонного класса, который никогда не используется в программе и соответственно никогда не инстанцируется\.

В качестве примера, вы можете открыть файл "Microsoft Visual Studio 8\\VC\\atlmfc\\include\\atldb\.h" и изучить шаблонный класс CErrorReporterHelper\. Функция PostError содержит ошибку\. В одной из строк забыта точка с запятой:

```cpp
template <const GUID* pguidProvider>
class CErrorReporterHelper
public:
  HRESULT PostError(HRESULT hrErr, IID* piid)
  {
    . . .
    errorinfo.hrError  = hrErr;
    errorinfo.iid    = *piid;
    spCrtErrInfo->SetGUID(errorinfo.iid)   //  <- ERROR
    spCrtErrInfo->SetSource(OLESTR("Provider PROGID"));
    . . .
```

Однако наличие этой ошибки не помешает вам использовать заголовочный файл atldb\.h в своих проектах\. Если вам не понадобится класс CErrorReporterHelper, то ошибки компиляции не возникнет\.

А вот анализатор PVS\-Studio, так как использует иные алгоритмы разбора кода, "споткнется" внутри функции, с аналогичной ошибкой и выдаст предупреждение "Cannot process the whole file"\. Также анализатор не сможет проверить часть этой функции\. Но в данном случае это совершенно не имеет значения, так как код некорректной функции нигде не используется\.