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 1987‑1989 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 1972‑1983. 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 1990‑1999 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=c89lub-ansi. - Clang – przy użyciu flagi
-std=c89. - Microsoft Visual C++ – w trybie
/TCi/Zazapewnia 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.