encyklopedia.space

C89 – standard języka C

C89, znany także jako ANSI C lub ISO C90, jest pierwszą ujednoliconą wersją specyfikacji języka C. Standard został opracowany w latach 19871989 przez ANSI i opublikowany w 1990 roku jako ANSI X3.159‑1989. W 1990 roku został przyjęty przez ISO jako ISO/IEC 9899:1990, stąd potoczna nazwa C89/C90.

Historia

Wcześniejsze wersje języka C rozwijane były w laboratoriach Bell Labs w latach 19721983. Do połowy lat 1980.s. nie istniał jednolity opis języka – posługowano się różnymi podręcznikami i implementacjami. W odpowiedzi na potrzebę przenośności oprogramowania sektor komercyjny i agencje rządowe zleciły ANSI opracowanie formalnego standardu, którego projekt przyjęto w 1989 roku.

Główne cechy standardu C89

  • Składnia i semantyka – pierwsze kompleksowe określenie reguł składniowych i semantycznych języka.
  • Biblioteka standardowa – określenie funkcji wejścia/wyjścia (printf, scanf), manipulacji łańcuchami (strcpy), matematyki (math.h) i innych.
  • Model pamięci – wprowadzenie pojęcia storage classes (extern, static, auto, register).
  • Preprocesor – dyrektywy warunkowe (#if, #ifdef), makra (#define) i wstawianie plików (#include).
  • Zgodność z POSIX – standard C89 stał się podstawą portowania systemów operacyjnych w środowiskach uniksowych.

Znaczenie i wpływ

Standard C89 zapewnił programistom i producentom kompilatorów wspólną bazę, co znacznie ułatwiło przenoszenie kodu źródłowego pomiędzy różnymi platformami. Dzięki temu w latach 19901999 wiele systemów operacyjnych (np. Unix, Windows) oraz aplikacji krytycznych (systemy wbudowane, oprogramowanie lotnicze) zostało napisanych w oparciu o C89.

Rozszerzenia i kolejne standardy

Choć C89 był przełomowy, jego ograniczenia (np. brak wsparcia dla bool, inline czy stałych tablicowych) doprowadziły do powstania kolejnych wersji:

  • C99 – wprowadził typ long long, bool, zmienne o zmiennym rozmiarze tablic oraz lepszą obsługę Unicode.
  • C11 – dodał obsługę wątków (_Thread_local), atomików i ulepszoną obsługę błędów.
  • C17 – drobne korekty i poprawki błędów w C11.

Mimo pojawienia się nowszych standardów wiele projektów wciąż wymaga zgodności z C89, zwłaszcza w środowiskach o ograniczonych zasobach, gdzie najnowsze funkcje mogłyby zwiększyć rozmiar kodu lub wymagać nowszych wersji kompilatora.

Implementacje zgodne ze standardem C89

Do najważniejszych kompilatorów obsługujących C89 należą:

  • GCC – od wersji 2.95 dostępna pełna zgodność z -std=c89 lub -ansi.
  • Clang – przy użyciu flagi -std=c89.
  • Microsoft Visual C++ – w trybie /TC i /Za zapewnia zgodność z C89.
  • Turbo C – klasyczne środowisko DOS, które pierwotnie definiowało „ANSI C”.

Krytyka

Niektórzy krytycy zarzucają C89 brak nowoczesnych konstrukcji, co utrudnia pisanie bezpiecznego kodu (np. brak wbudowanego typu bool, brak mechanizmów zarządzania pamięcią). Z drugiej strony, prostota i minimalizm standardu jest postrzegana jako zaleta w systemach wbudowanych, gdzie zasoby są ograniczone.

Dziedzictwo

Standard C89 pozostaje fundamentem współczesnych języków, takich jak C++, Objective‑C czy C#, które wywodzą składnię i semantykę z pierwotnej specyfikacji. Jego wpływ widać również w edukacji informatycznej – wiele podręczników i kursów wprowadzających programowanie wciąż bazuje na przykładach napisanych w stylu C89.

Patrz także