Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Ошибка компиляции относится к состоянию, когда компилятору не удается скомпилировать часть исходного кода компьютерной программы либо из-за ошибок в коде, либо, что более необычно, из-за ошибок в самом компиляторе. Сообщение об ошибке компиляции часто помогает программистам отлаживать исходный код. Хотя определения компиляции и интерпретации могут быть расплывчатыми, обычно ошибки компиляции относятся только к статической компиляции, а не к динамической компиляции . Однако важно отметить, что динамическая компиляция все еще может технически иметь ошибки компиляции, [ необходима ссылка ] хотя многие программисты и источники могут идентифицировать их как ошибки времени выполнения. Большинство оперативных компиляторов , таких как механизм Javascript V8 , неоднозначно называют ошибки компиляции синтаксическими ошибками, поскольку они проверяют их во время выполнения . [1] [2]

Примеры [ править ]

Распространенные ошибки компиляции C ++ [ править ]

  • Необъявленный идентификатор, например:

doy.cpp: In function `int main()': doy.cpp:25: `DayOfYear' undeclared (first use this function)[3]

Это означает, что переменная DayOfYear пытается использоваться перед объявлением.

  • Общая функция необъявлена, например:

xyz.cpp: In function `int main()': xyz.cpp:6: `cout' undeclared (first use this function)[3]

Это означает, что программист, скорее всего, забыл включить iostream .

  • Ошибка синтаксического анализа, например:

somefile.cpp:24: parse error before `something'[4]

Это может означать, что в конце предыдущего оператора отсутствует точка с запятой.

Внутренние ошибки компилятора [ править ]

Внутренняя ошибка компилятора (обычно сокращенно ICE) - это ошибка, которая возникает не из-за ошибочного исходного кода, а из-за ошибки в самом компиляторе. Иногда их можно обойти, внося небольшие незначительные изменения в исходный код вокруг строки, указанной ошибкой (если такая строка вообще указана), [5] [ необходим лучший источник ], но иногда необходимо внести более крупные изменения, например рефакторингкод, чтобы избежать определенных конструкций. Использование другого компилятора или другой версии компилятора может решить проблему и в некоторых случаях быть приемлемым решением. Когда достигается внутренняя ошибка компилятора, многие компиляторы не выводят стандартную ошибку, а вместо этого выводят сокращенную версию с прикрепленными дополнительными файлами, которые предоставляются только для внутренних ошибок компилятора. Это сделано для того, чтобы гарантировать, что программа не выйдет из строя при регистрации ошибки, что сделало бы ее решение практически невозможным. Дополнительные файлы, прикрепленные к внутренним ошибкам компилятора, обычно имеют специальные форматы, в которых они сохраняются, например, .dumpдля Java . Эти форматы, как правило, труднее анализировать, чем обычные файлы, но все же могут содержать очень полезную информацию для решения ошибки, вызывающей сбой.[6]

Пример внутренней ошибки компилятора:

somefile.c: 1001: внутренняя ошибка компилятора: ошибка сегментацииПожалуйста, отправьте полный отчет об ошибке,с предварительно обработанным исходным кодом, если необходимо.См. <Http://bugs.gentoo.org/> для инструкций.

Ссылки [ править ]

  1. ^ «Ошибки | Документация по Node.js v7.9.0» . nodejs.org . Проверено 14 апреля 2017 .
  2. ^ "SyntaxError" . Сеть разработчиков Mozilla . Проверено 14 апреля 2017 .
  3. ^ a b «Распространенные ошибки компилятора и компоновщика C ++» . Архивировано из оригинала на 2008-02-16 . Проверено 12 февраля 2008 .
  4. ^ «Ошибки компилятора, компоновщика и времени выполнения» .
  5. Каннингем, Уорд (18 марта 2010 г.). «Ошибка компилятора» . WikiWikiWeb . Проверено 14 апреля 2017 .
  6. ^ జగదేశ్. «Анализ сбоя JVM» . Проверено 15 апреля 2017 .