Ошибка компиляции - Compilation error

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

Примеры

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

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

doy.cpp: в функции `int main () ': doy.cpp: 25:` DayOfYear' не объявлен (сначала используйте эту функцию)[3]

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

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

xyz.cpp: В функции `int main () ': xyz.cpp: 6:` cout' не объявлен (сначала используйте эту функцию)[3]

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

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

somefile.cpp: 24: ошибка разбора перед чем-то[4]

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

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

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

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

somefile.c: 1001: внутренняя ошибка компилятора: Ошибка сегментации Пожалуйста, отправьте полный отчет об ошибке с предварительно обработанным исходным кодом, если это необходимо. Инструкции см. на .

использованная литература

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