Co daje nam standard w kompilatorach języka C typu std=C11 i czym się różni od C99 i C98?

Standardy w kompilatorach C, takie jak C11, C99 i C90 (czasami mylony z C98), są kluczowe dla zapewnienia zgodności kodu między różnymi kompilatorami i platformami.

Każdy z tych standardów języka programowania C wprowadza nowe funkcje i udoskonalenia w języku C. Oto główne różnice między nimi:

C90 (znany też jako ANSI C lub C89)

  • Wprowadzony w: 1989 (nazywany też ANSI C)
  • Najważniejsze cechy:
    • Podstawowe typy danych, struktury, unie, wyliczenia
    • Standardowa biblioteka C (stdio.h, stdlib.h, string.h itd.)
    • Brak wsparcia dla zmiennych o zmiennej długości (VLA)
    • Brak funkcji inline

C99

  • Wprowadzony w: 1999
  • Najważniejsze cechy:
    • Deklaracje w dowolnym miejscu: Można deklarować zmienne w dowolnym miejscu w kodzie, a nie tylko na początku bloku.
    • Komentarze stylu C++: Dodano wsparcie dla komentarzy w stylu C++ (//).
    • Typy całkowite o stałej szerokości: Wprowadzenie nagłówka <stdint.h> z typami takimi jak int32_t, uint64_t itd.
    • Złożone typy liczbowe: Dodano wsparcie dla typów złożonych (_Complex).
    • Zmienna długość tablic (VLA): Możliwość deklarowania tablic o zmiennej długości.
    • Restrict: Nowe słowo kluczowe restrict dla wskaźników, poprawiające optymalizacje.

C11

  • Wprowadzony w: 2011
  • Najważniejsze cechy:
    • Zgodność z wcześniejszymi standardami: Zapewniono wsteczną zgodność z C99.
    • Atomowość: Dodano wsparcie dla operacji atomowych (stdatomic.h).
    • Typy anonimowe: Możliwość używania typów anonimowych.
    • Równoczesność: Nowe funkcje i makra wspierające równoczesność (threads.h).
    • _Generic: Dodano słowo kluczowe _Generic do tworzenia genericznych makr.
    • Static_assert: Dodano static_assert do sprawdzania warunków w czasie kompilacji.
    • Anulowanie VLAs (opcjonalne): VLA (Variable Length Arrays) stały się opcjonalne, co oznacza, że nie wszystkie kompilatory muszą je wspierać.

Wpływ standardów języka C na rozwój systemów operacyjnych

Systemy operacyjne, zwłaszcza Unix i Linux, powstały dzięki językowi C.

UNIX i C – fundament nowoczesnych systemów operacyjnych

Pierwsze wersje UNIX-a były napisane w asemblerze, ale w 1973 roku system UNIX został przepisany w C. To pozwoliło na łatwiejsze przenoszenie kodu na różne platformy, co było kluczowe dla jego popularyzacji. Początkowo UNIX był systemem o licencji zamkniętej i tylko komputery na uczelniach miały dostęp do kodu UNIXa, który był napisany w języku Asembler i C. Tak rozpowszechnił się język C jako język programowania systemowego. To był ważny punkt startowy do powstania systemów z otwartym kodem *BSD. Po czym z kolei Linus Torvalds zainspirowany tym ruchem zaproponował swoje jądro Linux. Tak w skrócie narodził się Linux 🙂

Linux i standardy C

Jądro Linuxa jest zgodne głównie ze standardem C11, choć niektóre fragmenty kodu bazują na starszych rozwiązaniach. Nowoczesne standardy pomagają w:

  • Zarządzaniu pamięcią – np. aligned_alloc z C11,
  • Programowaniu wielowątkowym – dzięki stdatomic.h,
  • Lepszej przenośności kodu – ułatwiają kompatybilność na różnych platformach.

Podsumowanie

Każdy z tych standardów wprowadza różne ulepszenia, które czynią język C bardziej elastycznym i lepiej dostosowanym do nowoczesnych potrzeb programistycznych:

  • C90: Podstawy języka C.
  • C99: Duże ulepszenia, szczególnie w zakresie zmiennych o zmiennej długości, nowych typów danych i deklaracji zmiennych w dowolnym miejscu.
  • C11: Nowoczesne funkcje takie jak atomowość, równoczesność i genericy, które ułatwiają programowanie współczesnych aplikacji.

Standardy te pozwalają programistom na tworzenie bardziej złożonych i wydajnych aplikacji, jednocześnie zapewniając, że kod jest przenośny i zgodny z różnymi kompilatorami i platformami.

TUX - maskotka systemu Linux

About the author

Autor "BIELI" to zapalony entuzjasta otwartego oprogramowania, który dzieli się swoją pasją na blogu poznajlinuxa.pl. Jego wpisy są skarbnicą wiedzy na temat Linuxa, programowania oraz najnowszych trendów w świecie technologii. Autor "BIELI" wierzy w siłę społeczności Open Source i zawsze stara się inspirować swoich czytelników do eksplorowania i eksperymentowania z kodem.