Ошибка компиляции
Ошибка компиляции или ошибка компиляции относится к состоянию, когда компилятору не удается скомпилировать часть компьютерной программы исходного кода либо из-за ошибок в коде, либо, что более необычно, из-за ошибок в самом компиляторе. Сообщение об ошибке компиляции часто помогает программистам отлаживать исходный код. Хотя определения компиляции и интерпретации могут быть расплывчатыми, обычно ошибки компиляции относятся только к статической, а не к динамической компиляции . Однако динамическая компиляция технически может иметь ошибки компиляции. [ нужна ссылка ] хотя многие программисты и источники могут идентифицировать их как ошибки времени выполнения . Большинство JIT-компиляторов , таких как движок 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
для Явы . Эти форматы, как правило, сложнее анализировать, чем обычные файлы, но они все равно могут содержать очень полезную информацию для устранения ошибки, вызывающей сбой. [6]
Пример внутренней ошибки компилятора:
somefile.c:1001: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <http://bugs.gentoo.org/> for instructions.
Ссылки
[ редактировать ]- ^ «Ошибки | Документация Node.js v7.9.0» . nodejs.org . Проверено 14 апреля 2017 г.
- ^ «Синтаксическая ошибка» . Сеть разработчиков Mozilla . Проверено 14 апреля 2017 г.
- ^ Jump up to: а б «Распространенные ошибки компилятора и компоновщика C++» . Архивировано из оригинала 16 февраля 2008 г. Проверено 12 февраля 2008 г.
- ^ «Компилятор, компоновщик и ошибки времени выполнения» .
- ^ Каннингем, Уорд (18 марта 2010 г.). «Ошибка компилятора» . ВикиВикиВеб . Проверено 14 апреля 2017 г.
- ^ జగదేశ్. «Анализ сбоя JVM» . Проверено 15 апреля 2017 г.