exponenta event banner

Файл не компилируется

Файл имеет ошибку компиляции

Описание

Этот дефект возникает, когда Polyspace не может проанализировать файл из-за ошибок компиляции. Дефект находится в первой строке и столбце файла и указывает, что файл имеет одну или несколько ошибок компиляции.

Для поиска фактических ошибок компиляции см. журнал анализа. Для получения информации о дальнейших исследованиях в:

Используйте эту проверку, чтобы узнать, есть ли файлы с проблемами компиляции в интеграционном анализе (Polyspace Bug Finder или Polyspace Bug Finder Server) или текущий анализируемый файл еще не скомпилирован (Polyspace as You Code). Использование этой проверки позволяет не открывать журнал анализа каждый раз, чтобы узнать, есть ли проблемы с компиляцией. По результатам анализа можно определить, не был ли файл скомпилирован.

Риск

Как правило, компилятор также может найти проблемы, обнаруженные средством проверки дефектов.

Если файл компилируется с помощью компилятора, но этап компиляции анализа Polyspace завершается неуспешно, это означает, что конфигурация анализа не позволяет точно эмулировать компилятор. Например, если анализ завершается неуспешно из-за того, что стандартная библиотечная функция не определена, может потребоваться явно указать папки, содержащие заголовки компилятора, используйте polyspace-configure для извлечения путей или другого улучшения конфигурации.

Зафиксировать

Определите все ошибки компиляции из журнала анализа и исправьте их.

Примеры

развернуть все

int nthFib (int n) {
    int i=0, sum=1;
    for (int iter = 0; iter < n; iter++) {
      int t = i;
      i = sum;
      sum += t;
    }
    return iter;
}

В этом примере переменная iter определяется только в for цикл. Но return оператор вне цикла ссылается на переменную, что приводит к ошибке неопределенного идентификатора. (Ошибка компиляции здесь также указывает на логическую ошибку, так как целью было вернуть переменную sum.)

#include <cstdio>
#include <cstdlib>

void func() {
   char* message = malloc (strlen ("Hello, World\n"));
   strcpy (message, "Hello, World\n");
   printf ("%s", message);
   free (message);
}

В этом примере строковые функции strlen и strcpy используются, но файл заголовка cstring не включен. Это приводит к появлению неопределенных функций.

Информация о результатах

Группа «Надлежащая практика»
Язык: C | C++
По умолчанию: Откл.
Синтаксис командной строки: file_does_not_compile
Воздействие: Низкий
Представлен в R2021a