Błąd kompilacji

Błąd kompilacji odnosi się do stanu, w którym kompilator nie może skompilować fragmentu kodu źródłowego programu komputerowego z powodu błędów w kodzie lub, co bardziej niezwykłe, z powodu błędów w samym kompilatorze. Komunikat o błędzie kompilacji często pomaga programistom w debugowaniu kodu źródłowego. Chociaż definicje kompilacji i interpretacji mogą być niejasne, generalnie błędy kompilacji odnoszą się tylko do kompilacji statycznej, a nie do kompilacji dynamicznej . Jednak kompilacja dynamiczna może nadal technicznie zawierać błędy kompilacji, [ potrzebne źródło ] , chociaż wielu programistów i źródeł może identyfikować je jako błędy w czasie wykonywania . Większość kompilatorów just-in-time , takich jak silnik Javascript V8 , niejednoznacznie odnosi się do błędów kompilacji jako błędów składniowych , ponieważ sprawdzają je w czasie wykonywania .

Przykłady

Najczęstsze błędy kompilacji C++

  • Niezadeklarowany identyfikator, np.:

doy.cpp: W funkcji `int main()': doy.cpp:25: `DayOfYear' niezadeklarowany (najpierw użyj tej funkcji)

Oznacza to, że zmienna „DayOfYear” próbuje zostać użyta przed zadeklarowaniem.

  • Wspólna funkcja niezadeklarowana, np.:

xyz.cpp: W funkcji `int main()': xyz.cpp:6: `cout' niezadeklarowane (najpierw użyj tej funkcji)

Oznacza to, że programista najprawdopodobniej zapomniał dołączyć iostream .

  • Błąd analizy, np.:

somefile.cpp:24: błąd parsowania przed „czymś”

Może to oznaczać, że na końcu poprzedniej instrukcji brakuje średnika.

Wewnętrzne błędy kompilatora

Wewnętrzny błąd kompilatora (powszechnie w skrócie ICE) to błąd, który występuje nie z powodu błędnego kodu źródłowego, ale raczej z powodu błędu w samym kompilatorze. Czasami można je obejść, dokonując drobnych, nieistotnych zmian w kodzie źródłowym wokół linii wskazanej przez błąd (jeśli taka linia w ogóle jest wskazana), [potrzebne lepsze źródło], ale czasami trzeba wprowadzić większe zmiany , takie jak refaktoryzacja kod, aby uniknąć pewnych konstrukcji. Użycie innego kompilatora lub innej wersji kompilatora może rozwiązać problem iw niektórych przypadkach być akceptowalnym rozwiązaniem. Po osiągnięciu wewnętrznego błędu kompilatora wiele kompilatorów nie wyświetla standardowego błędu, ale zamiast tego wyświetla skróconą wersję z dołączonymi dodatkowymi plikami, które są dostarczane tylko w przypadku wewnętrznych błędów kompilatora. Ma to na celu zapewnienie, że program nie ulegnie awarii podczas rejestrowania błędu, co sprawiłoby, że rozwiązanie błędu byłoby prawie niemożliwe. Dodatkowe pliki dołączone do wewnętrznych błędów kompilatora mają zwykle specjalne formaty, w których są zapisywane, takie jak .dump for Java . Te formaty są na ogół trudniejsze do analizy niż zwykłe pliki, ale nadal mogą zawierać bardzo przydatne informacje do rozwiązania błędu powodującego awarię.

Przykład wewnętrznego błędu kompilatora:

somefile.c:1001: wewnętrzny błąd kompilatora: Błąd segmentacji Prześlij pełny raport o błędzie, w razie potrzeby z wstępnie przetworzonym źródłem. Widzieć po instrukcje.